Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
strcpy不复制完整字符串 我使用Visual C++ 6,我有下面的代码。 char filename[1000], string[5]; FILE *fin; strcpy(filename, argv[3]); if ((fin = fopen(filename, "r")) != NULL) { fgets(string, 100, fin); string[strlen(string)-1] = NULL; printf("filename = %s\n", filename); printf("argv[3]= %s\n", argv[3]); printf("string = %s\n", string); }_String_Visual C++_Strcpy - Fatal编程技术网

strcpy不复制完整字符串 我使用Visual C++ 6,我有下面的代码。 char filename[1000], string[5]; FILE *fin; strcpy(filename, argv[3]); if ((fin = fopen(filename, "r")) != NULL) { fgets(string, 100, fin); string[strlen(string)-1] = NULL; printf("filename = %s\n", filename); printf("argv[3]= %s\n", argv[3]); printf("string = %s\n", string); }

strcpy不复制完整字符串 我使用Visual C++ 6,我有下面的代码。 char filename[1000], string[5]; FILE *fin; strcpy(filename, argv[3]); if ((fin = fopen(filename, "r")) != NULL) { fgets(string, 100, fin); string[strlen(string)-1] = NULL; printf("filename = %s\n", filename); printf("argv[3]= %s\n", argv[3]); printf("string = %s\n", string); },string,visual-c++,strcpy,String,Visual C++,Strcpy,argv[3]是完整路径和文件名,例如C:\Users\Desktop\file.txt,文件内容为 1 2 3 所以“1”应该存储在“string”变量中 然而,对于4次运行中的1次,我将获得输出 filename = C:\Users\Desktop\file.tx argv[3] = C:\Users\Desktop\file.txt string = <very long garbage value> 不复制整个字符串,缺少最后一个“t”?既然文件不应该存在,为什么fin

argv[3]是完整路径和文件名,例如C:\Users\Desktop\file.txt,文件内容为

1
2
3
所以“1”应该存储在“string”变量中

然而,对于4次运行中的1次,我将获得输出

filename = C:\Users\Desktop\file.tx
argv[3] = C:\Users\Desktop\file.txt
string = <very long garbage value>
不复制整个字符串,缺少最后一个“t”?既然文件不应该存在,为什么fin在这种情况下不为NULL

我还应该补充一点,这段代码存在于多线程程序中,但只有一个线程执行这段代码

string[5];
您只为4个字符和一个空终止符分配了足够的空间,但您的fgets最多读取100个字符

fgets(string, 100, fin);
您只为4个字符和一个空终止符分配了足够的空间,但您的fgets最多读取100个字符

fgets(string, 100, fin);

如果你使用C++,为什么你仍然使用<代码> char [< /代码>和<代码>文件>代码>而不是<代码> STD::String 和流?我更熟悉char []和文件。这会有什么不同吗?是的,会有<代码> STD::String ,像大多数其他代码> STD< /Cord>容器,自动扩展以包含所有的数据,这样就可以节省手动跟踪长度和内存分配。如果你使用C++,为什么仍然使用<代码> char []?和
FILE
而不是
std::string
和streams?我更熟悉char[]和FILE。这会有什么不同吗?是的,会有<与大多数其他
std
容器一样,code>std::string会自动扩展以包含您放入其中的所有数据,从而避免您手动跟踪长度和内存分配。是的,但fgets也不会读取到文件在“1”之后的\n。无论如何,这一行在strcpy之后,我认为这是我为“string”获取的垃圾值的主要问题。是的,但是fgets不会也读取到\n,文件在“1”之后。无论如何,这一行在strcpy之后,我认为这是我为“string”获取的垃圾值的主要问题。