我有兩個不同的文件名,其在頭文件中定義:在c中減少字符串長度,哪裏出錯?
1: 「physio_sensor_readout.csv」 2: 「statethresh_configuration.csv」
它們由
char* filename;
初始化和更高版本
filename = FILENAMEINAMACRO; which is the corresponding filename above
後來,filename被傳遞給另一個改變結尾的函數:
filename[strnlen(filename, FILENAME_LENGTH) - 4] = '\0';
這應該刪除結尾.csv和我strncat後新的一個。 FILENAME_LENGTH是60,所以足夠的空間。
它的工作原理,如果我通過 「statetresh _....」(連strncat函數之後),但與 「physio_se .....」。這將引發部分故障的情況下,1
strnlen(filename,FILENAME_LENGTH - 4)
回報21和25的情況下,2,這是點,在這裏我想提出終止空的正確位置。
這是用的char *一個問題,我應該初始化文件名以字符文件名[60]?
的問候,並感謝您
編輯:
您的建議解決了這個問題。謝謝!
看起來'FILENAMEINAMACRO'可能是一個帶引號的字符串,因此您試圖修改字符串文字,這是未定義的行爲。將'filename'改爲數組,並使用'strcpy'(或'strncpy',它不僅僅是'strcpy'的保存版本)將其放入。 – 2012-02-20 14:55:37
這可能是他們所說的,但爲了以防萬一, strnlen(filename,FILENAME_LENGTH) - 4'與'strnlen(filename,FILENAME_LENGTH - 4)不一樣' – 2012-02-20 14:57:31
這裏有什麼確切的問題?是不是strnlen函數返回正確的值? – jlemos 2012-02-20 15:03:57