我正在編寫一個程序,它將一些文件作爲參數並打印所有反轉的行。問題是,我得到意想不到的結果:打印一個字符串反轉C
如果我把它應用到一個文件包含以下行
one
two
three
four
我得到預期的結果,但是如果文件中包含
september
november
december
它返回
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()測量長度時,你需要爲NULL終止符+1。 – moeCake