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