C 如何更改字符串中的字符

C 如何更改字符串中的字符,c,C,我知道如果字符串是指针,则无法更改字符串中的字符,但我将字符串初始化为数组,但我现在仍然无法更改字符串: char temp[50]; FILE * f = fopen ( "123.txt", "r" ); while ( fscanf( f, "%s", temp ) != EOF ) { temp[2] = " "; } fclose(f); 它仍然显示 assignment makes integer from pointer without a cast [-Werror] 我

我知道如果字符串是指针,则无法更改字符串中的字符,但我将字符串初始化为数组,但我现在仍然无法更改字符串:

char temp[50];
FILE * f = fopen ( "123.txt", "r" );
while ( fscanf( f, "%s", temp ) != EOF )
{
  temp[2] = " ";
}
fclose(f);
它仍然显示

assignment makes integer from pointer without a cast [-Werror]
我该怎么处理它呢?

这句话:

temp[2] = " ";
正在尝试将字符串分配给单个字符

建议使用:

temp[2] = ' ';
将一个字符指定给一个字符


请注意,单引号而不是双引号

do temp[2]=''不能将字符串分配给char@i486遗憾的是,不可能对评论投否决票。但是你为什么建议temp[2]=32;?这是一种糟糕的风格。@i486我再次不能对你的评论投反对票。因为“\0”是一个很好的方法,可以清楚地表明您正在寻址空终止符。我不敢相信你认为直接使用ascii值比使用字符常量更好,对于代码可读性来说,使用字符常量显然更好,但由于这是我尊重你的观点,所以请不要回答我的评论。@i486 ASCII编码在C实现中很常见,但不是必需的。32在EBCDIC中,字符集不是空格,它是DS digit select,尽管它可能是非打印的。同样地,48不是0。尽管很少有人使用EBCDIC,但实现没有理由不能发明自己的表。唯一的要求是数字0到9表示是连续的。@i486当然不是,这是一个不现实的例子。只要从一开始就把事情做好,不要找一个糟糕的借口,以免有人误读。C必须是精确的,并且有良好的阅读技巧。我错过了一些东西,但仍然选择用C编写代码。