1

私は C のスキルに少し慣れていません。先日、課題に取り組んでいて、いくつかの指針に出くわしました。理由はわかりませんが、これは私を完全に困惑させました。したがって、解決策が些細なことである場合はご容赦ください。

次のコードを作成して、あるポインターのデータを別のポインターにコピーしました。memcpy、strcpy、またはその他の関数を使用したくありません。

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

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

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

*ptra = '\0';

これをコンパイルすると、セグメンテーション違反が発生します。誰でもこれで私を助けてもらえますか?

4

1 に答える 1

6

dereferende がありません*word != '\0': ループ状態にある必要があります:

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

はポインターであるため、wordと等しくなることはない\0ため、ループは両方の文字列の末尾を通過します。

于 2013-03-08T23:16:15.800 に答える