这是一个非常简单的程序,我用C语言编写,运行良好,但我不懂一些术语:
而不是list[list_size] = strdup(file)我会:
char*test=filestrcpy(list[list_size],test)。我明白了
分割错误。
char*test=malloc(sizeof(char)*MAX_FILENAME_LEN+1)test=file
以及strcpy(list[list_size],test)。我有分割错误。
甚至strcpy(list[list_size],file)。我有分割错误。

  # include < stdio.h >
  # include < string.h >
  # define MAX_LIST_SIZE 1000
  # define MAX_FILENAME_LEN 128

  int main() {
  FILE * infile;
  char * list[MAX_LIST_SIZE],
  file[MAX_FILENAME_LEN + 1];
  size_t list_size = 0;
  infile = popen("ls", "r");

  if (infile != NULL) {

      while ((list_size < MAX_LIST_SIZE) &&(fscanf(infile, "%s", file) == 1)) {

          list[list_size] = strdup(file);

          list_size++;

          puts(file);
      }
  }
  pclose(infile);
  return 0;

}
如果有人能帮忙,那就太好了。

最佳答案

非标准strdup函数做两件事:分配动态内存和复制字符串。这与调用malloc然后调用strcpy是完全相同的(这就是为什么strdup是一个100%多余的函数)。
当您执行strcpy(list[list_size],test)时,list并不指向任何已分配的内存-它指向内存中任意位置的随机内存。您尝试将数据复制到这个随机位置,然后发生崩溃。
分配内存并用test指向它。当你让test指向file时,你就会忘记所有的记忆,相反,你已经造成了一个内存泄漏。一旦你这样做了,你就做了和1中一样的错误,因为变量testfilelist无关。
与1和2中的错误相同。
我建议在深入研究动态内存分配和字符串处理之前,多研究一下指针和数组。

07-24 09:44
查看更多