将数据从一个指针复制到另一个seg错误

Tri*_*7er 1 c pointers segmentation-fault

我的C技能有点生疏,有一天我正在完成一项任务并遇到了一些指示.我不知道为什么,但这完全困扰了我.所以,请原谅我,如果解决方案是微不足道的.

我写了下面的代码,将数据复制到另一个指针.我不想使用memcpy,strcpy或任何其他功能.

char *word = "hello world!";
char *ptra = NULL;

ptra = malloc(strlen(word) + 1);

for (; word != '\0'; word++, ptra++) {
    *ptra = *word;
}

*ptra = '\0';
Run Code Online (Sandbox Code Playgroud)

现在,当我编译它时,我得到一个分段错误.有人可以帮我解决这个问题吗?

das*_*ght 7

你错过了一个dereferende:它应该*word != '\0'处于循环条件:

for (; *word != '\0'; word++, ptra++) {
    // ^ Here
    *ptra = *word;
}
Run Code Online (Sandbox Code Playgroud)

因为word是一个指针,它永远不会等于\0,所以你的循环将超过两个字符串的末尾.

  • 另外,如果OP习惯在使用它之前检查`malloc`的结果,那将是很好的. (2认同)