C 代码在 Linux 编译器中不起作用
Posted
技术标签:
【中文标题】C 代码在 Linux 编译器中不起作用【英文标题】:C code is not working in Linux compiler 【发布时间】:2017-12-23 21:21:24 【问题描述】:下面的代码是关于C语言中的文件操作。
第一个程序读取文件并将其存储到数组中,然后该程序询问用户您想从文件中获得哪个问题。如果用户输入,“2”程序从文件中获取第二个问题(获取文件中 2 到 3 个数字之间的所有字符)并打印到屏幕上。
我在 Windows 的 DEV C++ 编译器中编写了这段代码。它在开发 C++ 中工作。
但是当我在 Linux 终端中尝试这段代码时,代码会询问用户一个整数,但它不会将结果从文件打印到屏幕上。它没有给出任何错误并且程序关闭。
FILE* file = fopen("txt", "r");
char line[256];
char a[10][14];
char getIndex[2];
char firstIndex[2];
char secondIndex[2];
int firstIndexNum;
int secondIndexNum;
printf("Please enter number:");
fgets (getIndex, 100, stdin);
strcpy(firstIndex,getIndex);
firstIndexNum = atoi(firstIndex);
secondIndexNum = firstIndexNum + 1;
sprintf(secondIndex, "%d", secondIndexNum);
int i = 0;
while (fgets(line, sizeof(line), file))
strcpy(a[i],line);
i++;
int sizeArray = sizeof(a) / sizeof(a[0]);
for(int i=1;i<=sizeArray;i++)
if(strstr(a[i-1], firstIndex) != NULL)
while(strstr(a[i], secondIndex) == NULL)
printf("%s",a[i]);
i++;
fclose(file);
return 0;
有什么建议吗?
【问题讨论】:
Linux上的程序流程如何? 【参考方案1】:您需要将带有 CR/LF 行尾的文件“poems.txt”转换为 Unix 行尾。这可以通过 'tr' 命令完成。
tr -d '\r' < input.file > output.file
【讨论】:
@user9134929:值得注意的是,这足以“解决”您的问题。但是,user3121023 在 cmets 中发现的问题意味着您的代码充其量是非常脆弱的——在大多数情况下,除非您也修复这些问题,否则它仍然非常脆弱。 没问题,但你明白为什么转换解决了你的问题吗? 我也完全同意乔纳森的评论,分段错误几乎潜伏在该来源的每一行。如果@user9134929 在问题中添加“poems.txt”示例(前十行)并改进源代码(添加 main() 和 stdio.h),这可能对所有人都有好处。dos2unix
可能比运行 shell 命令容易一些。该实用程序不需要两个不同的文件来操作(就像tr
一样)。以上是关于C 代码在 Linux 编译器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
C 中的自定义函数在 Red Hat Linux 中不起作用,但在 HPUX 中可以
rename() 在使用 Dev C++ 编译的 C 程序中不起作用