2012-04-16 148 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); 

這名沒有被分配你無法複製「+」來命名,因爲沒有保留的內存做