【问题标题】:My string concatination is doubling its result each time, why?我的字符串连接每次都将结果加倍,为什么?
【发布时间】:2017-06-02 20:28:59
【问题描述】:

我基本上只是获取一个字符串并附加/连接另一个字符串。第一次运行会产生所需的结果,但第二次、第三次等结果似乎使 src 字符串加倍。将事物与 jQuery 结合起来非常简单,不确定 C 中发生了什么。我应该使用 memset 吗?还是calloc?

#include <stdio.h>
#include <string.h>

int main(void) {
  const char* name = "Michelle";
  char *ptr;
  char dest[30];
  char yourName[30];
  char dots[] = "..";
  int i;

  for (i=0;i<4;i++)
  {
    if (strlen(name) > 5)
    {
      sprintf(yourName, "%s", name);
      strncpy(dest, yourName, 3);
      ptr = strcat(dest, dots);
      sprintf(yourName, "%s", ptr);
      printf("%s\n", yourName);
    }
  }

  return 0;
}

我希望看到这样的结果

米歇尔成为麦克风.. 这行得通,但是如果我的名字结构有 4 个名字并且他们都是 Michelle,那么结果是......

Mic..
Mic....
Mic......
Mic........

【问题讨论】:

  • 您发布的代码有语法错误。这意味着它不是您尝试运行的确切代码。
  • Hmm 为我编译和运行。我完全按照我的方式输入了它,但看起来我确实错过了一个)。我将编辑缺少的括号。
  • 你喜欢this。也使用snprintf insterd of sprintf。

标签: c string strcat strncpy


【解决方案1】:

您没有注意以下警告:

strncpy() 函数类似,只是最多复制src 的n 字节。 警告:如果src的第一个n字节中没有空字节,则放在dest中的字符串不会以空值结尾。

替换

ptr = strncpy(dest, yourName, 3);
strcat(dest, dots);
sprintf(yourName, "%s", ptr);

与

ptr = strncpy(dest, yourName, 3);
dest[3] = '\0';
strcat(dest, dots);
sprintf(yourName, "%s", ptr);

或者只是

yourName[3] = '.';
yourName[4] = '.';
yourName[5] = '\0';

【讨论】:

  • 是的,我在 PTR 末尾添加了一个带有 strcat 的 '\0' 字符,但有人编辑了我的问题,所以你再也看不到了。
  • 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多