在 C 中复制字符串时出错

Error copying a string in C

我有这个程序:

#include <stdio.h>

void string_copy(char * dst,char * src);

int main(){
    char stringA[] = "Hello";
    char stringB[10];

    string_copy(stringB,stringA);

    printf("%s",stringB);
    return 0;

}

void string_copy(char * dst,char * src){
    if(src == NULL || dst == NULL) return;

    while(*src != '\n'){
        *dst = *src;
        dst++;
        src++;
    }
}

我不明白为什么这段代码不起作用。 我得到:

Error: the program has stopped working

我该如何解决?

你应该写while(*src != '[=10=]')。 C 中的字符串以 NULL 字符 '\0' 结束,而不是以换行符 '\n' 结束。

你应该使用 '[=11=]' 而不是 '\n':

试试这个:

void string_copy(char * dst,char * src){
    if(src == NULL || dst == NULL) return;

    while(*src != '[=10=]'){
        *dst = *src;
        dst++;
        src++;
    }
    *dst = '[=10=]'; // <-- need to add this 
}

[=13=] 是空字符

\n 是新行 char

  1. '\n' in C is known as new line character.

  2. '[=17=]' in C by default signify end of the string.

所以在循环中 while (*src != '\n') 而不是使用 '\n' 使用 '[=12=]' .当 while 循环将在 src 字符串的末尾识别 [=13=] 时它将终止,到那时 src 字符串将被复制到 dst 字符串。