我不允许使用任何 header ,我想创建代码,它接受一个字符串输入并将其修改为它的反向。没有编译时错误,但在运行时它确实将字符串更改为空,而不是反转。
int str_size(char str[])
{
int i=0;
while (str[i]!='\0')i++;
return i;
}
void str_rev(char str[])
{
char buff;
int size=str_size(str);
if(size==0 || size==1){}
else
{
for (int i = 0; i < (size/2)-1; i++)
{
buff=str[i];
str[i]=str[size-i];
str[size-i]=buff;
}
}
}
str_rev
在 main(void)
中调用。
终端消息:
iplayzed@iplayzed-Lenovo-ideapad-330-15IKB:~/Egyetem/Progalap gyak 1.fv/3_hazi$ gcc -Wall -O2 -static -o my my.c
my.c: In function ‘main’:
my.c:30:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%s",str);
^~~~~~~~~~~~~~~
iplayzed@iplayzed-Lenovo-ideapad-330-15IKB:~/Egyetem/Progalap gyak 1.fv/3_hazi$ ./my
asdf
String length: 4
The original string:"asdf"
The reversed string:""
它变成空白的原因是什么?
最佳答案
反转指数略微偏离 1。
考虑 size=4,那么对于第一次迭代 (i=0),代码将执行:
- buff = str[0]
- str[0] = str[4-0] ;
- str[4] = 浅黄色;
回想一下,str[4] 是终止 NUL,因此代码会将 NUL 插入第一个位置,因此返回一个空字符串。
这可以通过以下方式轻松解决:
buff=str[i];
str[i]=str[size-i-1];
str[size-i-1]=buff;
关于c - 反转字符串的函数将字符串更改为空,而不是反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58251281/