我完全失去了这个。我无法弄清楚为什么这不起作用。带有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>
我无法弄清楚为什么这不能正确终止。我已经尝试使数组更长,但每次都得到相同的结果。我正在失去理智!
有人看到了吗?感谢。
答案 0 :(得分:2)
你的数组只有16个元素,你要写到17日。所以这是未定义的行为。
答案 1 :(得分:1)
你离阵列很远。而不是path_left_15[strlen("/.goutputstream")+1] = '\0';
尝试path_left_15[15] = '\0';
您将截断字符串,但在打印时会安全。