Я кодирую программу, которая принимает некоторые файлы в качестве параметров и печатает все обратные строки. Проблема заключается в том, что я получаю неожиданные результаты:Печатать строку, отмененную в C
Если я применяю его в файл, содержащий следующие строки
one
two
three
four
я получаю ожидаемый результат, но если файл содержит
september
november
december
It возвращает
rebmetpes
rebmevons
rebmeceds
И я не понимаю, почему это добавляет «S» в конце
Вот мой код
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void reverse(char *word);
int main(int argc, char *argv[], char*envp[]) {
/* No arguments */
if (argc == 1) {
return (0);
}
FILE *fp;
int i;
for (i = 1; i < argc; i++) {
fp = fopen(argv[i],"r"); // read mode
if(fp == NULL)
{
fprintf(stderr, "Error, no file");
}
else
{
char line [2048];
/*read line and reverse it. the function reverse it prints it*/
while (fgets(line, sizeof line, fp) != NULL)
reverse(line);
}
fclose(fp);
}
return (0);
}
void reverse(char *word)
{
char *aux;
aux = word;
/* Store the length of the word passed as parameter */
int longitud;
longitud = (int) strlen(aux);
/* Allocate memory enough ??? */
char *res = malloc(longitud * sizeof(char));
int i;
/in this loop i copy the string reversed into a new one
for (i = 0; i < longitud-1; i++)
{
res[i] = word[longitud - 2 - i];
}
fprintf(stdout, "%s\n", res);
free(res);
}
(Примечание: некоторые код был удален для ясности, но она должна составить)
Когда вы malloc для строки, измеряя длину, используя strlen(), вам нужен +1 для NULL-терминатора. – moeCake