我正在使用Visual C++ 6.0,並且我有下面的代碼。strcpy不能複製完整的字符串
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);
}
argv [3]是完整的路徑和文件名,例如, C:\用戶\桌面\ file.txt的,文件的內容是
1
2
3
因此,「1」應該被存儲在「字符串」變量。
然而,持續約1出4個奔跑,我會得到輸出
filename = C:\Users\Desktop\file.tx
argv[3] = C:\Users\Desktop\file.txt
string = <very long garbage value>
爲什麼
strcpy(filename, argv[3]);
不可複製整個字符串,錯過了最後的 「T」?在這種情況下爲什麼fin不是NULL,因爲該文件不應該存在?
我還應該補充說這個代碼存在於一個多線程程序中,但是隻有一個線程執行這個代碼。
如果您正在使用C++,你爲什麼還在使用'的char [] '和'FILE'而不是'std :: string'和流? – DCoder
我更熟悉char []和FILE。這會有所作爲嗎? – Rayne
是的,它會有的。與大多數其他'std'容器一樣,'std :: string'自動擴展以包含所有放入它的數據,從而使您無需手動跟蹤長度和內存分配。 – DCoder