好吧这是一个家庭作业问题,我不能使用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上却是。
答案 0 :(得分:0)
因为使用了gets
,所以最好使用
if (s2[i] != '\0' && s2 [i] != '\n')
而不是
if (s2[i] != '\0')
如果n
定义了字符的最大数字,则应确保n < 100
。在for
循环i == n
写'\0'
到第i个位置后可能会导致问题。或者循环应该是
for (i = 0; i < n-1; i++)