0

我有以下代码,其中 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). 可能是什么原因?请帮忙。

4

2 回答 2

1

您必须分配名称和数据

strncat(name, "+", 1);

此处未分配名称,您不能将“+”复制到名称,因为没有保留的内存来执行此操作

于 2012-04-16T19:27:49.037 回答
1

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

char resultingName[BUFFER_LENGTH];
strcpy(resultingName, name);
strncat(resultingName, "+", 1);
[...]
于 2012-04-16T19:38:12.573 回答