c - 从 C 文件中读取输入时反转数组的问题

标签 c arrays file-io reverse

我目前正在尝试编写一个程序,该程序将逐行读取文件并将内容放入数组中。然后尝试将原始数组反转为第二个数组,以便稍后比较这两个数组。我当前的代码是

     #include <stdio.h>
     #include <string.h>

     void reversing(char buffer[], char reverse[], int stringLength);

     int main(int argc, char const *argv[])
     {
        int stringLength = 0;
        FILE *fp;   //Declaring a FILE type pointer calling it fp
        char buffer[64]; //Declaring a char array the size of 64 named buffer

        fp = fopen("./test.txt", "r"); 
        if(fp == NULL)
        {
          printf("File did not open!\n");
        }
        else
        {
              while(fgets(buffer, 64, (FILE*)fp) != NULL)
              {
                 printf("\nNormal String: %s", buffer); //Print content in buffer(original array)
                 stringLength = strlen(buffer);        //Storing the length of the readed input

                 char reverse[stringLength];  //Creating array for reversed comparision(comparision not implemented yet)

                 printf("String length: %d\n", stringLength); //Print string length(for debugging)
                 reversing(buffer, reverse, stringLength);
                 printf("Reversed String: %s\n", reverse);//Print content in reverse(Reverse array)
             }

             printf("\n\nEND OF FILE Reached!\n");

             fclose(fp);
       }    
        return 0;
    }

    void reversing(char buffer[], char reverse[], int stringLength)
    {
       int i = 0;
       int j = stringLength - 1;

       while(i < j)
       {
       reverse[j] = buffer[i];
       i++;
       j--;
       }
    }

我的测试文件很简单

    A
    AB
    ABC
    ABCD
    ABCDE

它应该打印到屏幕上

   Normal String:   A
   Reversed String: A 
   Normal String:   AB 
   Reversed String: BA
   Normal String:   ABC 
   Reversed String: CBA
   Normal String:   ABCD 
   Reversed String: DCBA
   Normal String:   ABCDE 
   Reversed String: EDCBA

当我通过调试器运行程序时,它显示一旦进入反转函数,字母就会被正确交换;但是,一旦它退出该函数并调用打印反向数组,它就会打印垃圾,但在垃圾内部是前两个元素正确交换。任何建议的帮助将不胜感激。

作为旁注我试图让它尽可能简单,因为真正的目标或这个程序是在 ci20 机器上采用它并在汇编中实现它。

最佳答案

stringLength = strlen(buffer); //Storing the length of the readed input

char reverse[stringLength];   //Creating array for reversed comparision(comparision not implemented yet)

您没有足够的空间来存储结尾的 \0

char reverse[stringLength]; 

应该是

char reverse[stringLength + 1]; 

并且不要忘记在反向函数的最后添加这个尾部 \0:

reverse[stringLength] = '\0';

但请注意(在这种情况下)您不需要临时反转字符串,只需传递原始字符串并交换直到到达 NUL 字符,查看 How do you reverse a string in place in C or C++?

关于c - 从 C 文件中读取输入时反转数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40375253/

相关文章:

c - GNU 链接和编译

c - 这个 'number' 函数有什么作用?

c - 如何在 Linux 上为 C 库使用已编译的二进制文件?

ios - 如何修复无法将类型 'AnyObject' 的值转换为预期参数类型 '_?' 错误?

c++ - Qt - 返回 qint32 数组的数组

android - 从字节数组 (byte[]) 转换位图 - 位图仍然为空

python - 如何拆分大数据并稍后重新加入

C 文件输入输出

php - 合并 2 个非常大的文本文件,更新每一行,不使用内存

c - 逐行读取文件 - 为什么我只得到第一行?