2012-04-16 40 views
0

我有下面的代码,其中strcat导致问题。strcat导致字符串变空

 char* tokens = strtok(buf, "+"); 
     int n = 0; 
     int type = 0; 
     char* name = ""; 
     char* lifetime = ""; 
     char* data = ""; 
     for(n=0; tokens!=NULL; n++) { 
      if(n==0) 
      type = atoi(tokens); 
      if(n==1) 
      name = tokens; 
      if(n == 2) { 
      if(type == 1) 
       lifetime = tokens; 
      else 
       data = tokens; 
      } 
      if(n == 3) 
      lifetime = tokens; 
      tokens = strtok(NULL, "+"); 
     } 

     if(type == 2) { 
     printf("Received Data with Name: %s, Data: \"%s\" and lifetime: %s seconds\n", name, data, lifetime); 

     strncat(name, "+", 1); 
     printf("Data: %s\n", data); 
     strncat(name, data, strlen(data)); 
     printf("Full Name: %s\n", name); 
     } 

在我正确打印的名称,数据和寿命都打印行。但是在strcat操作之后,我发现data值是空的。在添加调试printf语句之后,我发现data值在strncat(name,"+",1)之后变为空。可能是什么原因?请帮忙。

回答

1

的名称和数据指针指向buf字符串的某处。当连接到名称字符串时,您可能碰巧用空字符覆盖数据字符串。在写入之前,您需要为名称分配一个新缓冲区:

char resultingName[BUFFER_LENGTH]; 
strcpy(resultingName, name); 
strncat(resultingName, "+", 1); 
[...] 
1

您必须分配名称和数据

strncat(name, "+", 1); 

这名没有被分配你无法复制“+”来命名,因为没有保留的内存做

相关问题