根据我所阅读和理解的内容,例如,当我们将字符串传递给函数时,在该函数内部我们不能使用 sizeof( array )/sizeof( array[ 0 ] ) 来确定字符串的长度。所以我想知道这个将字符附加到字符串末尾的函数是否正确:
void append_ch_to_str( char *str, char ch )
{
int length = strlen( str );
str = ( char * )realloc( str, ( length + 1 ) * sizeof( char ) );
length = strlen( str );
*( str + length - 1 ) = '\0';
*( str + length - 2 ) = ch;
}
最佳答案
不正确,但可以更正如下:
char *append_ch_to_str( char *str, char ch )
{
int length = strlen( str );
char *str2;
str2 = ( char * )realloc( str, ( length + 2 ) * sizeof( char ) );
if (!str2) {
free(str);
return NULL;
}
str = str2;
str[length] = ch;
str[length+1] = 0;
return str;
}
所有这些都假设 str
指针指向已使用 malloc/calloc/strdup
分配的内存。
分配应为终止 0
字符提供空间,并为添加的字符再提供一个空间。
第二次计算字符串长度将具有相同的结果,因为它将计算非零字符,并且不会返回分配的缓冲区的大小。
如果内存不足,您必须检查 realloc 是否返回 NULL
。编辑:我添加了对 realloc 返回值的检查 - 这将有望防止复制未完成的代码...
正如注释中指出的,这也是一种不好的方法,因为 realloc 不能保证返回相同的指针值,这就是为什么该函数将返回新的指针值,而原始指针值在执行后将不再有效。
关于c - 将字符附加到字符串末尾的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21654290/