私はこのコードを実行しました:strcpyまたはstrcatは、printf文の中で使用すると文字列を不必要に変更しますか?
#include<stdio.h>
#include<string.h>
int main()
{
static char str1[] = "dills";
static char str2[20];
static char str3[] = "Daffo";
int i,j;
i = strcmp(strcat(str3, strcpy(str2, str1)), "Daffodills");
printf("%d", i);printf("\n");
printf("%s",str1);printf("\n");
printf("%s",str2);printf("\n");
printf("%s",str3);printf("\n");
printf("%s",strcpy(str2, str1));printf("\n");
printf("%s",strcat(str3, strcpy(str2, str1)));
return 0;
}
出力:str1が "病気" になった方法
0
ills
dills
Daffodills
ills
Daffodillsills
- を?
- なぜstrcpyが "ills"を返すのですか?
- strcat(str3、strcpy(str2、str1))がDaffodillsを返しても、strcmpの答えは0です。なぜですか?
あなたはどう思いますか?中間結果を分析しましたか?何故なの?デバッガは何を言いますか?あなたは何を期待しましたか? – Olaf
'str3'はあなたの最初の' strcat() '呼び出しに十分な大きさではありません。おそらく他の配列の一部を上書きするでしょう。 – Dmitri
行ごとに 'printf()'を呼び出すのではなく、最初の 'printf()'書式文字列に改行を入れる必要があります。つまり、 'printf("%d "、i); printf(" \ n ");'は 'printf("%d \ n "、i);' –