为什么我的 C 程序不能打印正确的字符串?

为什么我的 C 程序不能打印正确的字符串?

我正在编写一个简单的 C 程序,它反转一个字符串,从中获取字符串argv[1]。代码如下:

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

char* flip_string(char *string){
  int i = strlen(string);
  int j = 0;
  // Doesn't really matter all I wanted was the same size string for temp.
  char* temp = string; 
  puts("This is the original string");
  puts(string);
  puts("This is the \"temp\" string");
  puts(temp);

  for(i; i>=0; i--){
    temp[j] = string[i]
    if (j <= strlen(string)) {
      j++;
    }
  }

  return(temp);
}

int main(int argc, char *argv[]){
  puts(flip_string(argv[1]));
  printf("This is the end of the program\n");
}

基本上就是这样,程序编译并执行了所有操作,但temp最后不返回字符串(只有空格)。一开始,temp当它等于时,打印正常。此外,如果我在循环中逐个string字符地执行,则会打印正确的字符串,即字符串->反转。当我尝试将其打印到标准输出(循环之后/或在)时,什么也没发生 - 只打印了空格。printftempfortempformain

答案1

我发现您的代码中存在两个问题,首先,您只是定义了一个指向现有字符串的指针。因此,在写入字符串时,temp您会覆盖输入字符串。因此,请创建一个新字符串。

第二个问题是字符串以 结尾,0表示字符串结束。因此,如果您将最后一个字符写在新字符串的开头,它将在第一个字符处结束。因此,您恢复的字符串将不可见。

对我而言,您对函数进行的以下更改很有用:

char* flip_string(char *string){
  int i = strlen(string);
  int j = 0;
  // Doesn't really matter all I wanted was the same size string for temp.
  char* temp = malloc(strlen(string)); 
  puts("This is the original string");
  puts(string);
  puts("This is the \"temp\" string");
  puts(temp);
    i--;
  for(i; i>=0; i--){
    temp[j] = string[i];
    if (j <= strlen(string)) {
      j++;
    }
  }

  return(temp);
}

相关内容