尝试将字符附加到字符数组

时间:2015-07-03 21:16:53

标签: c arrays string

我试图追加角色' t'对于值为#34; hello"的字符数组,我确定数组大小,创建一个大1个字符的新数组,分配新的字符和' \ 0&#39 ;作为最后两个角色。 我一直打印出旧值(你好)。感谢

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

void append(char * string,char ch)
{
  int size;
  for (size=0;size<255;size++)
  {
    if (string[size]=='\0')
      break;
  }
  char temp[size+2];
  strcpy(temp,string);
  temp[size+1]='t';
  temp[size+2]='\0';
  printf("the test string is: %s\n",temp);
}

int main()
{
  char test[]="hello";
  append(&test,'t');
  return 0;
}

4 个答案:

答案 0 :(得分:2)

有效的功能可以按以下方式查看

void append( const char *string, char ch )
{
    size_t size = 0;

    while ( string[size] ) ++size;

    char temp[size+2];

    strcpy( temp, string );

    temp[size++] = ch;
    temp[size++] ='\0';

    printf( "the test string is: %s\n", temp );
}

它必须被称为

append( test, 't' );

答案 1 :(得分:1)

首先,你的函数调用是错误的。它应该是

append(test,'t');  // When an argument to a function, array decay to pointer to its first element.

然后,您必须从前一个字符串中删除'\0',否则您将获得相同的字符串。这是因为在追加字符ch之后,新字符串看起来像

"hello\0t\0"  

请注意'\0'之前的tprintf将停止该空字符。

您可以将'\0'个字符't'覆盖为

temp[size] = ch;
temp[size+1] = '\0';    

注意:由于语句

中数组temp的超出限制访问,您的程序会调用未定义的行为
 temp[size+2]='\0';

答案 2 :(得分:1)

由于循环在string[size]=='\0'时断开,然后一个字符串被复制到temptemp[size]也是\0,它永远不会被覆盖,因为下一个字符已分配在size+1。所以你的临时总是在size终止。最后temp"hello\0t\0"

答案 3 :(得分:0)

您找到但从不覆盖第一个空字符。