cli 输入的 c 中的分段错误 Linux 文件 I/O
Segmentation error Linux File I/O in c by cli input
我试图编写一个 c 程序,该程序通过命令行指定文件名,然后通过 system() 调用在文件上打开 nano 编辑器。
编辑并保存文件后,c 程序通过先读取文件、排序内容然后写入文件来对文件进行排序。
但是我遇到了分段错误。请帮忙。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argcn,char **args)
{
char *filename=*(args+1);
char *command="nano";
strcat(command," ");
strcat(command,filename);
char *txt=".txt";
strcat(command,txt);
system(command);
int numbers[100];
int n=0;
FILE *fp;
fp=fopen(filename,"r+");
while(1>0)
{
int num;
int x=fscanf(fp,"%d",&num);
if(x!=1)
break;
else
{
numbers[n]=num;
n+=1;
}
}
numbers[n]=-1;
int temp;
int temp1;
for(temp=0;temp<(n-1);temp++)
{
for(temp1=(temp+1);temp1<n;temp1++)
{
if(numbers[temp1]<numbers[temp])
{
int t=numbers[temp1];
numbers[temp1]=numbers[temp];
numbers[temp]=t;
}
}
}
fclose(fp);
FILE *nfp;
nfp=fopen(filename,"w");
for(temp=0;temp<n;temp++)
{
fprintf(nfp,"%d\n",numbers[temp]);
}
fclose(nfp);
}
此代码可能导致未定义的行为
char *command="nano";
strcat(command," ");
strcat(command,filename);
char *txt=".txt";
strcat(command,txt);
因为 command
是 5 字节长度,用“nano[=19=]”填充,并且您在 'allocated' 位置后附加 space“”和文件名到内存。
您需要预分配 command
足以容纳带有文件名的 nano 命令。例如你可以试试:
char command[256];
strcat(command,"nano");
strcat(command," ");
strcat(command,filename);
char *txt=".txt";
strcat(command,txt);
我试图编写一个 c 程序,该程序通过命令行指定文件名,然后通过 system() 调用在文件上打开 nano 编辑器。
编辑并保存文件后,c 程序通过先读取文件、排序内容然后写入文件来对文件进行排序。
但是我遇到了分段错误。请帮忙。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argcn,char **args)
{
char *filename=*(args+1);
char *command="nano";
strcat(command," ");
strcat(command,filename);
char *txt=".txt";
strcat(command,txt);
system(command);
int numbers[100];
int n=0;
FILE *fp;
fp=fopen(filename,"r+");
while(1>0)
{
int num;
int x=fscanf(fp,"%d",&num);
if(x!=1)
break;
else
{
numbers[n]=num;
n+=1;
}
}
numbers[n]=-1;
int temp;
int temp1;
for(temp=0;temp<(n-1);temp++)
{
for(temp1=(temp+1);temp1<n;temp1++)
{
if(numbers[temp1]<numbers[temp])
{
int t=numbers[temp1];
numbers[temp1]=numbers[temp];
numbers[temp]=t;
}
}
}
fclose(fp);
FILE *nfp;
nfp=fopen(filename,"w");
for(temp=0;temp<n;temp++)
{
fprintf(nfp,"%d\n",numbers[temp]);
}
fclose(nfp);
}
此代码可能导致未定义的行为
char *command="nano";
strcat(command," ");
strcat(command,filename);
char *txt=".txt";
strcat(command,txt);
因为 command
是 5 字节长度,用“nano[=19=]”填充,并且您在 'allocated' 位置后附加 space“”和文件名到内存。
您需要预分配 command
足以容纳带有文件名的 nano 命令。例如你可以试试:
char command[256];
strcat(command,"nano");
strcat(command," ");
strcat(command,filename);
char *txt=".txt";
strcat(command,txt);