使用两个索引相加的char数组赋值

时间:2014-07-17 08:03:41

标签: c

所以这是我的代码

#include <stdio.h>

main()
{
char name[62],first[31],last[31];
int i, j;

printf("What is your first name? ");
scanf("%[^\n]", first);
fflush(stdin);
printf("What is your last name? ");
scanf("%[^\n]", last);
fflush(stdin);


for (i=0; first[i]!='\0' ; i++)
    name[i]=first[i];

name[i]=' '; // for loop ends before null so insert space after last char
i++;

for (j=0; last[j]!='\0'; j++)
    name[i+j]=last[i+j];

name[i+j]='\0'; // ends before null so input null

printf("%s", name);


}

所以我编译它,我可以从名称输出名字,但它停在那里。我检查了解决方案,正确的方法是使用:

    for (j=0; last[j]!='\0'; j++, i++)
        name[i]=last[j];

    name[i]='\0'; // ends before null so input null
    printf("%s", name);

这样做是有意义的,但我想知道我的原始方法是否可行。这是一个模仿strcpy和strcat的练习,所以我知道这两种方式更快。<​​/ p>

1 个答案:

答案 0 :(得分:4)

这一个

for (j=0; last[j]!='\0'; j++)
    name[i+j]=last[i+j];

应该阅读

for (j=0; last[j]!='\0'; j++)
    name[i+j]=last[j];

因为i是您想要开始写姓氏的name数组的偏移量,j计算姓氏的字符。

也就是说,您的代码还存在其他一些主要问题(尝试输入超过31个字符的名称部分,您会看到......)