Closed. This question is
off-topic。它当前不接受答案。
想改善这个问题吗?
Update the question,所以它是
on-topic,用于堆栈溢出。
3年前关闭。
我有以下字符串
char *STRING ="{\"tostore\":1,\"irID\":0x0402,\"f\":38000,\"isHex\":0,\"ld\":50,\"rd\":[2450,600,1250,170,650,100,1200,3000,6000,100,2450,600,1250,170,650,100,1200,3000,6000,100,2450,600,1250,170,650,100,1200,3000,6000,100,1456,532,1512,472,1516,500,492,1508,472,1512,472]}";
我想连接以获得上述字符串。我使用了strcat和strncat函数,但是在连接时它在字符串之间给了我一个垃圾值。我得到的连接字符串如下
{“ tostore”:1,“ irID”:0x0402,“ f”:38000,“ isHex”:0,“ ld”:50,“ rd”:[2450,600,1250,170,650,100,1200,3000,6000, 100,2450,600,1250,170,650,100,1200,3000,6000,100,2450,600,1250,170,650,100,1200,3000,6000,100,1456,532,1512,472,1516,500,492,150ç8,472,1512 ,472]
粗体字母表示垃圾。
我还使用了以下函数来串联
void concatenate_string(char *original, char *add)
{
while(*original )
{
original++;
}
while(*add)
{
*original= *add;
add++;
original++;
}
*original = '\0';
}
在第一个串联正确的情况下,第二个串联都给我这个问题。
可能是什么问题?
(我使用了malloc并在使用后释放了它们)
这里的问题可能不在于您显示的代码(看起来不错),而在于您如何使用它:
void concatenate_string(char *original, char *add)
main()
{
char *str1 = "blablaba";
char *str2 = "111";
concatenate_string(str1, str2);
}
这将不起作用,因为str1是不可变的字符串。您需要为原始字符串分配足够的内存:
main()
{
char *str1 = "blablaba";
char *str2 = "111";
char *original = malloc(strlen(str1) + strlen(str2)+1);
strncpy(original, str1, strlen(str1));
concatenate_string(original, str2);
.....
delete(original)
}
这样,您可以确定自己不会超出范围。