复制字符数有限的字符串

时间:2015-03-11 09:23:57

标签: c string

好吧这是一个家庭作业问题,我不能使用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上却是。

1 个答案:

答案 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++)