#2
by かずま » 7年前
コードのコピペに失敗していますね。
最初の 18行が重複しています。
printf を挿入してデバッグしてみましょう。
コード:
#include <stdio.h>
void strcopy(char *sp2, char *sp1);
int main(void)
{
char str1[100] = "abc", str2[100] = "def"; // for DEBUG
printf("文字列を入力->");
scanf("%s",str1);
strcopy(str2,str1);
printf("str1[] = %s\n",str1);
printf("str2[] = %s\n",str2);
return 0;
}
void strcopy(char *sp2, char *sp1)
{
printf("strcopy: sp2=[%s], sp1=[%s]\n", sp2, sp1); // DEBUG
for( ;*sp1 = '\0'; sp1++, sp2++)
{
*sp2 = *sp1;
printf("for: sp2=[%s], sp1=[%s]\n", sp2, sp1); // DEBUG
}
*sp2 = '\0';
printf("return: sp2=[%s], sp1=[%s]\n", sp2, sp1); // DEBUG
}
実行結果
コード:
文字列を入力->yes
strcopy: sp2=[def], sp1=[yes]
return: sp2=[], sp1=[]
str1[] =
str2[] =
for文の中に入っていないことが分かります。
= は、代入演算子。
== と != は、等価演算子。
コードのコピペに失敗していますね。
最初の 18行が重複しています。
printf を挿入してデバッグしてみましょう。
[code=c]
#include <stdio.h>
void strcopy(char *sp2, char *sp1);
int main(void)
{
char str1[100] = "abc", str2[100] = "def"; // for DEBUG
printf("文字列を入力->");
scanf("%s",str1);
strcopy(str2,str1);
printf("str1[] = %s\n",str1);
printf("str2[] = %s\n",str2);
return 0;
}
void strcopy(char *sp2, char *sp1)
{
printf("strcopy: sp2=[%s], sp1=[%s]\n", sp2, sp1); // DEBUG
for( ;*sp1 = '\0'; sp1++, sp2++)
{
*sp2 = *sp1;
printf("for: sp2=[%s], sp1=[%s]\n", sp2, sp1); // DEBUG
}
*sp2 = '\0';
printf("return: sp2=[%s], sp1=[%s]\n", sp2, sp1); // DEBUG
}
[/code]
実行結果
[code=text]
文字列を入力->yes
strcopy: sp2=[def], sp1=[yes]
return: sp2=[], sp1=[]
str1[] =
str2[] =
[/code]
for文の中に入っていないことが分かります。
= は、代入演算子。
== と != は、等価演算子。