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 程序中不起作用

尽管添加了路径,但 #include 在 Visual Studio 代码中不起作用。它适用于终端

QMediaPlayer 在 dll 中不起作用

导航在目标 c 中不起作用

条件编译似乎在 Xamarin Studio 中不起作用