我有两个不同的文件名,其在头文件中定义:在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