【发布时间】:2015-03-11 18:15:36
【问题描述】:
好吧,这是一个家庭作业问题,我不能使用 string.h 库。此功能是复制不超过 n 个字符(字符 跟随空字符不复制)从s2指向的数组到s1指向的数组。
int main()
{
char sourceString[100];
char targetString[100];
int num;
printf("Enter a string:");
gets(sourceString);
printf("Enter no. of characters: ");
scanf("%d", &num);
printf("stringncpy(): %s", stringncpy(targetString, sourceString, num));
}
char *stringncpy(char * s1, char * s2, int n)
{
int i;
for (i = 0; i < n; i++)
{
if (s2[i] != '\0')
{
s1[i] = s2[i];
}
else
{
break;
}
}
s1[i] = '\0';
return s1;
}
它运行良好,只是它在 n 个字符之后打印了一些垃圾无法识别的字符。显然使用http://ideone.com/ 运行代码,我没有得到那些垃圾字符,但在 VS 上却有。
【问题讨论】:
-
你的编译器应该警告你
s1[i] == '\0'的结果没有被使用,因为它是一个比较。在此处使用分配=。 -
@MOehm 是的,抱歉,错字。
-
嗯,这也是解决您问题的方法,不是吗?因为垃圾字符来自非空终止字符串。
-
顺便说一句,
gets是邪恶的……这解决了问题吗? -
哦,确实如此。不知何故,当我早些时候重新编译时,我遇到了同样的错误。我知道 gets() 的情况,在这里使用它是为了让事情变得简单。