Por que meu programa C não imprime a string correta? [fechadas]

-2

Estou escrevendo um programa C simples que inverte uma string, pegando a string de argv[1] . Aqui está o código:

#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");
}

Basicamente, o programa compila e tudo, mas não retorna a string temp no final (apenas espaço em branco). No começo, imprime temp fine quando é igual a string . Além disso, se eu fizer um caractere por caractere printf de temp no loop for , a string temp correta será impressa, ou seja, string - > invertida. apenas quando eu tento imprimí-lo para o padrão (depois do for loop / ou no main ) nada acontece - apenas espaço em branco é impresso.

    
por SeahawksRdaBest 27.10.2013 / 22:42

1 resposta

2

Eu vejo dois problemas em seu código, primeiro você apenas define um ponteiro para sua string já existente. Portanto, enquanto você escreve a string temp , sobrescreve a string de entrada. Então crie uma nova string.

O segundo problema é que a string termina com 0 para sinalizar o final da string. Então, se você escrever o último caractere no início da nova string, ele terminará no primeiro caractere. Então, sua string invertida não será vista.

As seguintes alterações na sua função funcionaram para mim:

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);
}
    
por Rolf Lussi 27.10.2013 / 23:22