У меня есть два разных имен файлов, которые определены в заголовочном файле:Уменьшить длину строки в c, где ошибка?
1: "physio_sensor_readout.csv" 2: "statethresh_configuration.csv"
они инициализируются
char* filename;
и позднее
filename = FILENAMEINAMACRO; which is the corresponding filename above
Позже имя файла передается другой функции, которая изменяет окончание:
filename[strnlen(filename, FILENAME_LENGTH) - 4] = '\0';
Это должно удалить окончание .csv и i strncat новое потом. FILENAME_LENGTH - 60, поэтому достаточно места.
Он работает, если я передаю «statetresh _....» (даже strncat впоследствии), но не с «physio_se .....». Это проливает сегмент вина
strnlen(filename,FILENAME_LENGTH - 4)
возвращает 21 в случае 1 и 25 в случае 2. это правильное положение точки, где я хочу поставить нуль-терминатор.
Это проблема с символом char *, и я должен инициализировать имя файла с именем файла char [60]?
С уважением и спасибо
редактировать:
ваши предложения решить эту проблему. благодаря!
Похоже, что 'FILENAMEINAMACRO' - это, вероятно, строка с кавычками, и поэтому вы пытаетесь изменить строковый литерал, что является неопределенным поведением. Измените 'filename' на массив и используйте' strcpy' (или 'strncpy', который не является просто версией' strcpy'), чтобы вставить его. –
Скорее всего, это то, что они сказали, но на всякий случай ' strnlen (filename, FILENAME_LENGTH) - 4' - это не то же самое, что 'strnlen (filename, FILENAME_LENGTH - 4)' –
. Какая именно проблема здесь? Не возвращает ли функция strnlen правильные значения? – jlemos