gpt4 book ai didi

c - strncat() : Random character in target string

转载 作者:太空宇宙 更新时间:2023-11-04 01:51:46 25 4
gpt4 key购买 nike

考虑以下程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main() {

int ret = 0;

char dirname[] = "test/";
int path_maxlen = 256;
char path[path_maxlen];
int filename_maxlen = path_maxlen - strlen(dirname);

strncat(path, dirname, path_maxlen - 1);

strncat(path, "file.txt", filename_maxlen);

FILE *file = fopen(path, "r");

printf("path: %s\n", path);

if (file != NULL) {
printf("success\n");

fclose(file);
} else {
printf("fail\n");
ret = 1;
}

return ret;
}

这似乎一开始有效,但后来开始失败,即文件无法打开,尽管它存在并且没有对程序或文件进行任何更改。

那时我添加了打印出 path 的行。将输出重定向到文件后,发现 path 前面有一个随机字符(ASCII:1 SOH“标题开始”)。所以我假设 strncat 在这里没有正确使用,一些随机垃圾被写入我的路径数组。

如何正确连接上述示例中的字符串?

PS:我的操作系统是 Ubuntu 16.04。编译器是:

$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

最佳答案

strncat(path, dirname, path_maxlen - 1);

path 未初始化,因此是未定义的行为。

尝试

char path[path_maxlen];
path[0] = 0; // since path is VLA, usual "={0}" initialization does not work

或者您可以考虑仅使用 strcpy_s

关于c - strncat() : Random character in target string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41840964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com