作者:wb91cmy | 来源:互联网 | 2023-05-20 18:13
我有以下代码从命令行读取文件名并打开此文件:
#include
#include
int main(int argc, char **argv){
FILE *datei;
char filename[255];
//filename = argv[1];
//datei=fopen(filename, "r");
datei=fopen(argv[1], "r");
if(datei != NULL)
printf("File opened");
else{
printf("Fehler beim öffnen von %s\n", filename);
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
这个例子有效,但我想把命令行中的字符串写入char数组并将该char数组传递给fopen(),但是我得到了编译错误
Error: assignment to expression with array type filename = argv[1];
这个错误意味着什么,我该怎么做才能解决它?
1> chqrlie..:
您必须将字符串复制到char数组中,这不能通过简单的赋值完成.
简单的答案是strcpy(filename, argv[1]);
.
此方法存在一个大问题:命令行参数可能比数filename
组长,导致缓冲区溢出.
因此,正确答案是:
if (argc <2) {
printf("missing filename\n");
exit(1);
}
if (strlen(argv[1]) >= sizeof(filename)) {
printf("filename too long: %s\n", argv[1]);
exit(1);
}
strcpy(filename, argv[1]);
...
您可能希望将错误消息输出到stderr.作为旁注,你可能想选择英语或德语,但不能同时使用两者;-)