我正在获取一个文件路径,然后尝试用另一个文件名替换该文件名。我的代码在一台计算机上可以正常运行,但在另一台计算机上则不能。
这是我的代码:
FILE* SETTINGS_FILE;
char value[255];
char error[255];
char directory[255];
char file[255];
char* pos;
A_char pluginFolderPath[AEFX_MAX_PATH];
// READ LICENSE FILE IF AVAILABLE
PF_GET_PLATFORM_DATA(PF_PlatData_EXE_FILE_PATH_DEPRECATED, &pluginFolderPath);
strcat(pluginFolderPath, "\n");
pos = strrchr(pluginFolderPath, 0x5C);
if (pos != NULL) strcpy(file, pos + 1);
strcpy(directory, "");
strncpy(directory, pluginFolderPath, strlen(pluginFolderPath) - strlen(file)); // strip file extension and counter
strcat(directory, "dofpro_ae.lic");
在不正确的计算机上,显示如下:
您可以看到它在文件名的开头添加了一个方形字符,就在“d”之前。
有什么想法为什么会发生这种情况,以及为什么它可以在一台计算机上运行,但不能在另一台计算机上运行?
然后我尝试加载文件,但当然,由于添加了乱码,它找不到它。
此外,有没有更简单/更干净的方法来做到这一点?
谢谢
strncpy 不保证空终止。引用上面链接的参考文献
If count is reached before the entire array src was copied, the resulting character
array is not null-terminated.
另一方面,下一行代码使用
strcat
,这取决于它的参数是否以 null 结尾。这就是你的代码有问题的地方。
您可以做的最小更改是确保在开始字符串操作之前整个
directory
数组都填充有空字节
char directory[255]{};
这意味着
strncpy
可能不会(在您的情况下)添加空字节不是问题,因为您已经用空字节填充了数组。