【发布时间】:2022-11-16 06:15:36
【问题描述】:
您好,我遇到了一个问题。我在 C 方面不是很有经验。
我正在尝试将一个字符连接到我的路径变量。
但是当我运行这行代码时,我的另一个字符串变量被“覆盖”或者之后表现得很奇怪。注释掉后一切正常。我不想在这里发布整个代码我只是想知道这一行是否运行起来不安全。
strcat(path, "/");
我也试过:
//edit i actually tried strcat but later strncat copied the line while reversing the changes//
char temp = '/';
strncat(path, &temp);
我一直坚持这一点,所以也许有人可以提供帮助。
【问题讨论】:
-
那不能编译。
strncat想要三个参数。阅读手册页linux.die.net/man/3/strncat。它甚至提到了为什么在错误使用后事情可能会表现得很奇怪/不可预测。 -
是的,这是不安全的。您需要足够大的存储空间来容纳原始字符串加上更多的人物。在不显示“路径”是什么的情况下,我们必须假设它只有足够的空间容纳它包含的字符串。
-
在大多数情况下,
snprintf比strncat好用得多。在这种情况下,您也可以使用char *p = &path[strlen(path)]; *p++ = '/'; *p++ = '\0';,但前提是当前长度至少比最大长度小 2。 -
path变量是如何定义的? -
@printf 哦,谢谢你提出这个问题,我查看了声明,因为我正在重构一条很长的路径,所以初始大小太小了。一开始觉得够了,但是有点太少了