C 复制具有有限字符的字符串

C 复制具有有限字符的字符串,c,string,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:

好的,这是一个家庭作业问题,我不能使用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;
}
intmain()
{
字符源字符串[100];
char targetString[100];
int-num;
printf(“输入字符串:”);
获取(源字符串);
printf(“输入字符数:”);
scanf(“%d”和&num);
printf(“stringncpy():%s”,stringncpy(targetString,sourceString,num));
}
char*stringncpy(char*s1,char*s2,int n)
{
int i;
对于(i=0;i

它运行正常,只是在n个字符后打印一些无法识别的垃圾字符。通过运行代码,我没有得到那些垃圾字符,但在VS上得到了。

因为
得到了
的使用,所以使用它更好

     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++)
(i=0;i
编译器应该警告您,
s1[i]=='\0'
的结果没有被使用,因为这是一个比较。在这里使用赋值
=
。@MOehm是的,对不起,输入错误。这也是你问题的解决方案,不是吗?因为垃圾字符来自字符串的NOTNULL。顺便说一下,
gets
是邪恶的。。。这解决了问题吗?是的。不知何故,当我早些时候重新编译时,我也面临着同样的错误。我知道get()的情况,在这里使用它是为了让事情简单。