0

私はこれで完全に途方に暮れています。これが機能しない理由がわかりません。NULL ターミネータを持つ単純な文字配列 - 出力時に終了しないことを除いて!

int file_create(const char *path) {
    //trying to trap situations where the path starts with /.goutputstream
    char path_left_15[16];
    strncpy(path_left_15, path, 15);
    printf("%d\n", strlen("/.goutputstream")+1);
    path_left_15[strlen("/.goutputstream")+1] = '\0'; 
    printf("%d\n", strlen(path_left_15));
    printf("path_left_15: %s\n", path_left_15);
    //continue on...
}

これは私の出力です:

> 16 

> 16 

>/.goutputstream\B7<random memory stuff>

これが正しく終了しない理由がわかりません。配列を長くしようとしましたが、毎回同じ結果が得られます。気がおかしくなりそうだ!

誰か見ますか?ありがとう。

4

2 に答える 2

2

あなたの配列には16個の要素しかありませんが、17番目に書き込もうとしています。それは未定義の動作です。

于 2013-04-20T00:17:27.180 に答える
1

あなたは配列の範囲外です。path_left_15[strlen("/.goutputstream")+1] = '\0';試す代わりにpath_left_15[15] = '\0';

文字列を切り捨てますが、印刷するときは安全です。

于 2013-04-20T00:21:41.147 に答える