我试图追加角色' 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;
}
答案 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'
之前的t
。 printf
将停止该空字符。
您可以将'\0'
个字符't'
覆盖为
temp[size] = ch;
temp[size+1] = '\0';
注意:由于语句
中数组temp
的超出限制访问,您的程序会调用未定义的行为
temp[size+2]='\0';
答案 2 :(得分:1)
由于循环在string[size]=='\0'
时断开,然后一个字符串被复制到temp
,temp[size]
也是\0
,它永远不会被覆盖,因为下一个字符已分配在size+1
。所以你的临时总是在size
终止。最后temp
是"hello\0t\0"
答案 3 :(得分:0)
您找到但从不覆盖第一个空字符。