gpt4 book ai didi

c - C语言中如何修改字符串

转载 作者:行者123 更新时间:2023-11-30 18:15:57 25 4
gpt4 key购买 nike

我是 C 新手,我正在尝试对我拥有的字符串进行修改(我正在尝试反转它),但我不确定为什么程序没有按预期运行(显示无输出)。

void reverse(char *rTarget);

int main()
{
char memes[] = "memes";
reverse(memes);
printf("%s", memes);
}

void reverse(char *rTarget)
{
char swap;
int length = (int) strlen(rTarget);

for (int i = 0; i < length / 2; i++)
{
swap = rTarget[i];
rTarget[i] = rTarget[length - i];
rTarget[length - i] = swap;
}
}

最佳答案

对于初学者来说,这个函数声明

void reverse(char *rTarget[]);

相当于

void reverse(char **rTarget);

以这种方式声明它没有多大意义。

你应该像这样声明函数

void reverse( char rTarget[] );

并这样调用它

reverse( memes );

函数定义也是错误的。至少你必须使用像这样的循环

for (int i = 0; i < length / 2; i++)

以及这些表达式

    swap = *rTarget[i];
*rTarget[i] = *rTarget[length - i];
*rTarget[length - i] = swap;

无效。它们将被重写为

    swap = ( *rTarget )[i];
( *rTarget )[i] = ( *rTarget )[length - i -1];
( *rTarget )[length - i - 1] = swap;

此外,变量 length 的类型应为 size_t,因为通常 int 类型的对象不能容纳 size_t 类型的对象和函数 strlen 的返回类型为 size_t。所以你必须替换这个声明

int length = (int) strlen(*rTarget);

对于此声明

size_t length = strlen(*rTarget);

请注意,根据标准 C 字符串函数的约定,该函数应返回指向反转字符串的指针。

根据 C 标准,不带参数的 main 函数应声明为

int main( void )

这是一个演示程序,展示了如何声明和定义函数

#include <stdio.h>
#include <string.h>

char * reverse( char *s )
{
for ( size_t i = 0, n = strlen( s ); i < n / 2; i++ )
{
char c = s[i];
s[i] = s[n-i-1];
s[n-i-1] = c;
}

return s;
}

int main(void)
{
char memes[] = "memes";

puts( reverse( memes ) );

return 0;
}

程序输出为

semem

关于c - C语言中如何修改字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58608399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com