Char数组意外的空字符

时间:2015-11-06 14:55:44

标签: c arrays for-loop

char *placeDelimiter(char message[], int maxSize) {
  int msgSize = strlen(message);  //length of message
  int delSize = (msgSize/maxSize);//how many delimiters are needed
  int remSize = msgSize%maxSize;  //remainder characters
  int newSize = msgSize+delSize;  //new size of message
  if (remSize==0) delSize--;      //if there are no remainders remove , from end

  char *temp = (char *)malloc(newSize+1);
  int delPos = 0;
  int spacing = 0;
  for (int x=0;x<msgSize;x++) {
    if (delPos==maxSize) {
        temp[x] = ',';
        delPos=0;spacing++;
    } else {delPos++;}
    temp[x+spacing] = message[x];
    printf("Char: %c DelPos: %d Spacing: %d\n", temp[x], delPos, spacing);
  }
  temp[msgSize] = '\0';
  return temp;
}

上面是一个函数,它为每个设定数量的字符放置一个分隔符(maxSize

"This is a message"等输入中的函数与4的{​​{1}}一起提供时,输出应为maxSize。但是有一个问题是在循环期间给出空字符,这显然是字符数组的结尾

我在循环中添加了printf以在过程中提供更多信息,这是给出的输出:

"This, is ,a me,ssag,e"

第二个逗号后面的字符为空,我找不到它的原因。有没有人有任何想法?

1 个答案:

答案 0 :(得分:1)

此代码存在两个问题。一个

temp[x] = ',';

应该是:

temp[x + spacing] = ',';

因为如果条件为假,那就是角色的位置。

两个,是我在评论中谈到的NUL:

temp[msgSize] = '\0';

应该是:

temp[msgSize + spacing] = '\0';

IMO,如果您使用两个索引变量而不是偏移量,则会更容易理解。类似的东西:

for (x = 0, y = 0; x < msgSize; ++x, ++y)
{
    if (...)
      temp[y++] = ',';
    temp[y] = message[x]; 
}
temp[y] = '\0';

PS:您应该尝试使用调试器,它会让事情变得更容易......