Почему моя программа на C не печатает правильную строку? [closed]

Я пишу простой 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 fine, если он равен строке . Кроме того, если я выполняю символ за символом printf of temp в цикле for , правильная строка temp в напечатанной строке ie -> в обратном порядке. просто когда я пытаюсь распечатать его в стандартном формате (после цикла for / или в main ), ничего не происходит - печатается только пустое пространство.

-2
задан 24 January 2014 в 19:58

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);
}
0
ответ дан 24 January 2014 в 19:58

Другие вопросы по тегам:

Похожие вопросы: