c - 反转字符串的函数将字符串更改为空,而不是反转

标签 c arrays string function return

我不允许使用任何 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_revmain(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),代码将执行:

  1. buff = str[0]
  2. str[0] = str[4-0] ;
  3. 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/

相关文章:

python如何找到两个文本文件之间的所有单词匹配

C++ 标准 :string memory model

c - 将数组传递给方法时使用指针更改数组

c - C中sprintf的段错误

javascript - 如何使用 PHP 从动态输入字段捕获数组值?

java - Java 中的数组和银行账户

c - 在 C 中返回错误的 MD5 散列

java - 如何构建自己的传输层协议(protocol)?

c - 无法显示消息

Python+C 比纯 C 快(稍微)快