在C中按值传递字符串

时间:2015-06-26 13:58:50

标签: c string

在通过C中的值传递字符串的多个示例之后,我仍然不明白为什么以下代码不起作用

int main(void){
  char *fileList;
  strcpy(fileList,"This is a test line\n");
  char type = 'F';

  if(checkFileList(fileList, type)){
    printf("Proper File list\n");
  }
  else{
    printf("Improper File list\n");
  }

}


int checkFileList(char *string, char type){
  // Do something with string
}

如果我在主函数中将变量fileList定义为 -

,则此程序有效
char fileList[128];

但我无法为此字符串提供固定大小,因为我只在运行时获取字符串,因此不知道它会持续多长时间。

我在这里做错了什么?请注意,我不想通过引用传递字符串,因为我将更改函数中的字符串,并且不希望它反映在原始字符串中。

2 个答案:

答案 0 :(得分:3)

在您的代码中

char *fileList;
strcpy(fileList,"This is a test line\n");

调用undefined behaviour 因为,fileList未经初始化使用。

在使用之前,您需要将内存分配给fileList。也许malloc()和一系列功能将帮助您实现这一目标。另请阅读free()

FWIW,

  

如果我在主函数中定义变量fileList,则该程序有效         char fileList[128];

因为,fileList是一个数组,内存分配已由编译器完成。所以,可以使用它。

BTW "按值传递字符串" 是滥用条款。 C对任何传递的函数参数使用pass-by-value。

答案 1 :(得分:0)

为了在运行时为字符串分配内存,最好先了解字符串的大小:

int main(void){
  const char *str = "This is a test line\n";
  int len = strlen(str);
  char *fileList = malloc(len);

  // then later you also have to take care for releasing the allocated memory:
  free(fileList);
}