C:扭转字符串 - 指针混乱

时间:2014-04-29 14:18:21

标签: c

我正在尝试使用以下函数反转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]

我希望你能解决我的问题。

谢谢!

4 个答案:

答案 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循环之后