我正在尝试反转 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
我是一名优秀的程序员,十分优秀!