为什么这个 C 程序不给出给定字符串的反转?

问题描述

为什么这个程序没有给出给定字符串 (cmd)(base) ~/Documents/c/summerC$ valgrind ./mem ==81073== Memcheck,a memory error detector ==81073== copyright (C) 2002-2017,and GNU GPL`d,by Julian Seward et al. ==81073== Using Valgrind-3.17.0.GIT-lbmacos and LibVEX; rerun with -h for copyright info ==81073== Command: ./mem ==81073== ==81073== Warning: set address range perms: large range [0x7fff202d0000,0x8000200d0000) (defined) ==81073== Warning: set address range perms: large range [0x7fff202d0000,0x7fff7ff88000) (defined) ==81073== Warning: set address range perms: large range [0x7fff8e23c000,0x7fffc02d0000) (noaccess) ==81073== Warning: set address range perms: large range [0x7fffc02d0000,0x7fffe2560000) (defined) ==81073== Warning: set address range perms: large range [0x7fffe2560000,0x7fffffe00000) (noaccess) my new code ran ==81073== ==81073== HEAP SUMMARY: ==81073== in use at exit: 0 bytes in 0 blocks ==81073== total heap usage: 0 allocs,0 frees,0 bytes allocated ==81073== ==81073== All heap blocks were freed -- no leaks are possible ==81073== ==81073== For lists of detected and suppressed errors,rerun with: -s ==81073== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 的反转,尽管 computer 函数工作正常(当我评论其他代码并且只运行那部分时)并且给出正确的输出但是第二个 {{ 1}} 函数没有给出任何输出

length()

解决方法

这些表达式语句

*(p + i) = *(p - (count - 1) - i);
*(p - (count - 1) - i) = temp;

不正确,

你的意思是

*(p + i) = *(p + ( count - 1 ) - i);
*(p + (count - 1) - i) = temp;

也代替这个声明

count = length("COMPUTER");

这样写会更符合逻辑

count = length( word );

这是一个演示程序。

#include <stdio.h>

size_t length( const char * );
char * reverse( char *,size_t );
 
int main(void) 
{
    char word[] = "COMPUTER";
    size_t count = length( word );

    puts( reverse( word,count ) );

}

size_t length( const char *p )
{
    size_t count = 0;

    while ( *( p + count ) != '\0' ) ++count;
    
    return count;
}

char * reverse( char *p,size_t count )
{
    for ( size_t i = 0; i < count / 2; i++ )
    {
        char temp = *( p + i );
        *( p + i ) = *( p + count - 1 - i );
        *( p + count - 1 - i ) = temp;
    }
    
    return p;
}

程序输出为

RETUPMOC