Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
strcat导致字符串变为空_C_String - Fatal编程技术网

strcat导致字符串变为空

strcat导致字符串变为空,c,string,C,String,我有以下代码,其中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(t

我有以下代码,其中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操作之后,我发现
数据
值为空。添加调试printf语句后,我发现
数据
值在
strncat(名称“+”,1)
之后立即变为空。原因可能是什么?请帮助。

您必须分配名称和数据

strncat(name, "+", 1);

此处未分配名称您无法将“+”复制到名称,因为没有用于此操作的保留内存

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

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