gpt4 book ai didi

c - 初学者 : reversing a string with pointers

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:34 27 4
gpt4 key购买 nike

我正在尝试反转 C 字符串。我知道更简单的方法来做到这一点,但我正在尝试练习一些指示。这编译但返回空字符串,我不明白为什么。我在这里缺少什么?

#include <stdio.h>
#include <stdlib.h>
int main(){
char *forwards, *backwards;
forwards = "hello";
backwards = (char*) malloc( strlen(forwards) );
int i;
for( i = strlen(forwards) - 1; i >=0; --i )
backwards[ strlen(forwards) - i ] = forwards[i];
printf("%s", *backwards );
return 0;
}

最佳答案

您有多个错误。

首先计算出来的指数是错误的,应该减去1来自向后索引,例如:

for (i = strlen(forwards) - 1; i >= 0; --i )
{
printf("%d -> %lu\n", i, strlen(forwards) - i - 1);
backwards[ strlen(forwards) - i - 1] = forwards[i];
}

/* prints
4 -> 0
3 -> 1
2 -> 2
1 -> 3
0 -> 4

请注意,没有理由让循环倒计时,for (i = 0; i < length; ++i)会以完全相同的方式工作

第二个错误是strlen不包括 NUL 终止符,所以你的 backwards应分配为 malloc(strlen(forwards)+1) .

第三个错误是您没有在反向字符串上设置终止符,您必须手动放置它,例如:

backwards[strlen(forwards)] = '\0';

最后一个错误是你取消引用了 printf 中的指针,这是你不应该做的,所以它应该是

printf("%s\n", backwards);
^
no * here

关于c - 初学者 : reversing a string with pointers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36636701/

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