fprintf字符串终止的心理障碍

时间:2013-04-20 00:13:32

标签: c c-strings null-terminated

我完全失去了这个。我无法弄清楚为什么这不起作用。带有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>

我无法弄清楚为什么这不能正确终止。我已经尝试使数组更长,但每次都得到相同的结果。我正在失去理智!

有人看到了吗?感谢。

2 个答案:

答案 0 :(得分:2)

你的数组只有16个元素,你要写到17日。所以这是未定义的行为。

答案 1 :(得分:1)

你离阵列很远。而不是path_left_15[strlen("/.goutputstream")+1] = '\0';尝试path_left_15[15] = '\0';

您将截断字符串,但在打印时会安全。