Я пишу простой 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
), ничего не происходит - печатается только пустое пространство.
Я вижу две проблемы в вашем коде, сначала вы просто определяете указатель на вашу уже существующую строку. Поэтому, пока вы пишете строку 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);
}