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);