我有以下字符串
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”:西班牙语 - 玻利维亚, “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 C 8,472,1512,472]
粗体字母表示垃圾。
我还使用以下函数来连接
void concatenate_string(char *original, char *add)
{
while(*original )
{
original++;
}
while(*add)
{
*original= *add;
add++;
original++;
}
*original = '\0';
}
所有这些都在第二次连接期间给我这个问题,而第一次连接是正确的。
可能是什么问题? (我使用malloc并在使用后释放它们)
答案 0 :(得分:1)
这里的问题可能不在您展示的代码中(看起来没问题),而在于您如何使用它:
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)
}
这样你就可以确定自己没有出界了。