使用指针连接字符串

时间:2016-03-01 11:32:18

标签: c string

我有以下字符串

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并在使用后释放它们)

1 个答案:

答案 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) 
}

这样你就可以确定自己没有出界了。