我是C语言的新手,正在开发一种实用程序,该实用程序扫描文件夹中的重复文件,然后对它们进行处理。当我有重复的文件名列表时,我需要用完整的路径和文件名来构建一个字符串来操作文件,但是每次尝试在路径上添加\时都会出现错误,但是错误不会如果我跳过会发生。这是问题代码的简化版本:
char *TARGET1 = ".";
char *TARGET2 = ".\\test";
char *PATH_SEP = '\\';
char *folder1_files[filecount1]; // These arrays are populated with file
char *folder2_files[filecount2]; // names elswhere in the code
int l = 0; // The counter for the loop that is comparing the filenames
char buffer[1024];
strcpy(buffer, TARGET2);
printf("Building the path now...\n");
//strcat(buffer, PATH_SEP);
strcat(buffer, folder2_files[l]);
printf("Path: %s\n", buffer);
如果我将底部的第三行注释掉,程序将完成,并得到以下输出:
路径已建立!
路径:。\ testfile3.txt
如果取消注释,则会出现此错误:访问冲突读取位置0x0000005C
谁能指出这是哪里出了问题?在C中有更标准的方法来构建路径吗?
最佳答案
诸如PATH_SEP
之类的字符常量不会自动以NUL终止。您打电话的时候
strcat(buffer, PATH_SEP);
strcat
例程希望两个参数都指向NUL终止的字符串。因为PATH_SEP不是NUL终止的,所以例程继续扫描内存,寻找NUL字节。最终,它要么覆盖重要的东西,要么不应该访问内存。更改
char *PATH_SEP = '\\';
至
char *PATH_SEP = "\\";
并且您的代码应按预期执行。
祝你好运。
关于c - 从C中的字符串构建路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47129300/