我正在尝试使用以下函数反转C中的字符串:
void reverse(char *txt) {
char *copytxt;
copytxt = (char*) malloc((strlen(txt) + 1 ) * sizeof(char));
strcpy(copytxt, txt);
int i;
for(i=0;i<strlen(copytxt);i++){
if(i == strlen(copytxt)){
*(txt+i) = 0;
}
else{
*(txt+i) = *(copytxt+strlen(copytxt)-i-1);
}
}
}
当我在for循环的每个循环中打印*(txt+i)
作为char时。我会得到我的反转弦。
但是,如果我打印字符串txt
它只是给我什么。这是为什么?我究竟做错了什么?我是否对指针做错了什么?
顺便说一下:我不允许使用这种表示法:txt[1]
我希望你能解决我的问题。
谢谢!
答案 0 :(得分:1)
你确定:
for(i=0;i<strlen(copytxt);i++){
if(i == strlen(copytxt)){
很好吗?
此:
i == strlen(copytxt)
由于这个原因,永远不应该坚持:
i=0; i < strlen(copytxt);i++
我想? (由此:<
,i
永远不会获得strlen(copytxt)
的价值
答案 1 :(得分:1)
您实际上可以就地执行字符串反转,而无需分配更多内存:
void swap(char *lhs, char *rhs) {
char temp = *lhs;
*lhs = *rhs;
*rhs = temp;
}
void reverse(char *txt) {
int length = strlen(txt);
int i;
for (i=0; i<length/2; ++i)
swap(txt + i, txt + length - i - 1);
}
答案 2 :(得分:0)
<强>已更新强>:
您的代码中的内存泄漏最少。当您反转字符串时,应以某种方式返回结果(例如,使函数不是void
而是char*
):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* reverse(char *txt)
{
char *copytxt = (char*) malloc((strlen(txt) + 1) * sizeof(char));
strcpy(copytxt, txt);
int i;
for(i=0;i<strlen(txt);i++)
{
if(i == strlen(txt)){
*(txt+i) = 0;
}
else
{
*(copytxt+i) = *(txt+strlen(txt)-i-1);
}
}
return copytxt;
}
该功能正常工作(可能是你的主要功能中的错误),下面是我的情况:
int main()
{
char txt[] = "Test me";
char* copytxt = reverse(txt);
printf("%s\n", copytxt);
return 0;
}
答案 3 :(得分:0)
下面的if块永远不会被执行
if(i == strlen(copytxt)){
*(txt+i) = 0;
}
最好放
*(txt+i) = 0;
在for循环之后