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);
      }

名前、データ、および有効期間を出力する行では、すべてが正しく出力されます。dataしかし、strcat 操作の後、値が空であることがわかりました。datadebug printf ステートメントを追加した後、の直後に value が空になることがわかりましたstrncat(name,"+",1)。その理由は何ですか?助けてください。

4

2 に答える 2

1

名前ポインタとデータ ポインタの両方が buf 文字列のどこかを指しています。名前文字列に連結するとき、データ文字列を null 文字で上書きする可能性があります。name に書き込む前に、新しいバッファを割り当てる必要があります。

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

名前とデータを割り当てる必要があります

strncat(name, "+", 1);

ここでは名前が割り当てられていません。「+」を名前にコピーすることはできません。これを行うための予約済みメモリがないためです。

于 2012-04-16T19:27:49.037 に答える