我目前正在尝试创建一个解析文件并更改一些字符串的应用程序,但这并不重要。
我目前正在尝试组合几个字符串以产生统一的结果;但是,结果似乎与代码不一致。这是代码:
/* Now let's recombine the strings */
strcat(slash+1, secondSlash+1);
printf("\nFirst String: %s", toConvert);
printf("\nSecond String: %s", slash+1);
strcat(toConvert, slash+1);
printf("\nFinal String: %s", toConvert);
输出看起来像这样:
First String: **1)**
Second String: *rails new <websiteName> *
Final String: **1)** *rails nw <webssiteName> *
为什么最终字符串不是两个原始字符串的准确串联?任何帮助将不胜感激!
答案 0 :(得分:0)
根据@WhozCraig的建议,这个问题违反了以下内容:
C99 7.23.3.1p2: "...If copying takes place between objects that overlap, the behavior is undefined."
因此,为了解决这个问题,我停止使用strcat
函数,而是手动将我的字符串的所有元素向左移动。 (之前我使用的策略是将连接点设置为'\0'
和strcat
,这显然不是最佳选择。
为了解决这个问题,我只是循环遍历整个char数组并移动所有元素。以下是我的代码片段供参考:
/* Move all things to the left */
int index;
for (index = (slash+2-toConvert); index <= secondSlash-toConvert; index++)
toConvert[index-1] = toConvert[index];
/* Now move all things after the secondSlash area left */
int secondIndex = secondSlash+2-toConvert;
while(toConvert[secondIndex] != '\0')
{
toConvert[secondIndex-2] = toConvert[secondIndex];
secondIndex++;
}
/* Add null char */
toConvert[secondIndex-2] = '\0';
希望这有助于某人。