Я создал программу на языке c, которая анализирует файл исходного кода на языке быстрого набора для извлечения определенных данных, которые мне понадобятся для документирования на работе. извлеченные данные сохраняются в CSV-файл, который затем форматируется в лист Excel.
Все работает, кроме этой функции, которую я поставил ниже. В некоторых сценариях я хотел удалить все пробелы и табуляции из строки, считываемой из файла, чтобы я мог сохранить инструкцию в виде строки в атрибуте struct.
Программа не аварийно завершает работу, но когда я печатаю ff () новую строку с удаленными пробелами, выводятся некоторые другие символы.
Пример "cmd.exe", "PowerShell \ v1.0 \ Modules", "igh \ AppData \ LocaloYSφo¡"
Если я делаю Printf("%s\n", currentLine);
Он печатает нормально
Когда я использую printf("%s\n", removeWhiteSpace(currentLine));
, я получаю неопределенное поведение.
Вот функция
/******************************************************************
* Takes a string as input, returns it without tabs or spaces
* Used to put whole line into the additional commands
* Attribute
******************************************************************/
static char* removeWhiteSpace(char* string)
{
int i;
int j;
int len = strlen(string);
char ch;
char* result = malloc(sizeof(char)*len+1);
memset(result, 0, sizeof(*result));
j=0;
for (i=0; i<len; i++)
{
ch = string[i];
if ((ch != ' ') && (ch != '\t'))
{
result[j] = ch;
j++;
}
}
result[strlen(result)] = '\0';
return result;
}
Кроме того, я использую fgets () для получения строки из файла, а размер буфера равен 1000.
Нежелательные символы не существуют в текстовом файле, по крайней мере, не видны в любом случае.
Спасибо за ваше время, и если вам нужен текстовый файл или остальная часть программы, я могу предоставить его, но это долго.
Кроме того, я использую IDE кодовых блоков с помощью компилятора GCC, у меня нет ошибок или предупреждений при компиляции.