【发布时间】:2018-04-30 18:37:06
【问题描述】:
我创建了一个程序,它从 .txt 文件中读取一系列字符串,并在编译后创建一个新的 .txt 文件,其中字符串应按字母顺序排列。问题是我不能写超过 10 个换句话说,编译器只是停止/崩溃,为什么?它取决于编译器的类型吗?我目前正在使用 Code-Bloks。如何优化代码以更流畅地运行?
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void arrange(int n, char *x[])
{
char *temp;
int i,str;
for(str = 0; str < n-1; ++str)
{
for(i = str+1; i < n; ++i)
{
if(strcmp(x[str],x[i]) > 0)
{
temp = x[str];
x[str] = x[i];
x[i] = temp;
}
}
}
return;
}
int number_of_lines = 0;
void countOfLinesFromFile(char *filename){
FILE* myfile = fopen(filename, "r");
int ch;
do
{
ch = fgetc(myfile);
if(ch == '\n')
number_of_lines++;
}
while (ch != EOF);
if(ch != '\n' && number_of_lines != 0)
number_of_lines++;
fclose(myfile);
return number_of_lines;
}
int main()
{
int i , ts=0;
char *x[10];
char *fileName = "WORDS.txt";
countOfLinesFromFile(fileName);
printf("%d",number_of_lines);
FILE * fp;
fp = fopen ("WORDS.txt", "r");
for(i = 0; i < number_of_lines; i++)
{
x[i] = (char*) malloc (1200*sizeof(char));
fscanf(fp, "%s", x[i]);
}
FILE *fPointer;
fPointer=fopen("Alphabetical.txt","w+");
arrange(i,x);
for(i = 0; i < number_of_lines; i++)
{
fprintf(fPointer,"%s\n",x[i]);
}
fclose(fPointer);
fclose(fp);
return 0;
}
【问题讨论】:
-
这是 C,不是 C#。
-
编译器警告是防止简单逻辑错误的第一道防线。例如,您应该收到来自
void countOfLinesFromFile(char *filename)的“警告:'return' with a value, in function return void” -
@AestheticCode 如果您的问题得到充分回答,您可以通过单击您认为最有用的答案旁边的复选标记将其标记为已解决。
标签: c crash compiler-warnings alphabetical-sort