При отправке filename необходимо рассмотреть функцию для открытия и чтения. Вам не только нужно, чтобы подтвердил вызов fopen
, но перед тем, как добраться до этой точки, вы должны подтвердить, что filename
является указателем на действительный адрес, а не указателем NULL
. Кроме того, поскольку вы объявили char tmpWord[30];
, вы должны (1) инициализировать массив до нуля и (2 - что более важно), ограничить размер слова, считанного fscanf
, до 29
символов для обеспечения того, что tmpWord
будет содержать строку null-terminated
.
Ввод куски вместе, вы можете использовать следующий как processText
:
void processText (char *filename)
{
if (!filename) { /* validate filename not NULL */
fprintf (stderr, "processText() error: invalid argument.\n");
exit(EXIT_FAILURE);
}
char tmpWord[30] = {0}; /* initialize variables */
FILE *fp = fopen (filename, "r");
if (!fp) { /* validate file is open */
fprintf (stderr, "processText() error: file open failed '%s'.\n",
filename);
exit(EXIT_FAILURE);
}
printf ("\n reading words from : %s\n\n", filename);
/* read a maximum of 29 chars in each word into tmpWord & print */
while (fscanf (fp, " %29s", tmpWord) != EOF)
printf(" %s\n", tmpWord);
putchar ('\n');
fclose(fp);
}
Простой пример вызова processText
из main()
может быть:
#include <stdio.h>
#include <stdlib.h>
void processText (char *filename);
int main (int argc, char **argv) {
if (argc < 2) { /* validate one argument given */
fprintf (stderr, "error: insufficient input, usage: %s filename.\n",
argv[0]);
return 1;
}
processText (argv[1]);
return 0;
}
С тест ввода/вывода существа:
$ cat dat/captnjack.txt
This is a tale
Of Captain Jack Sparrow
A Pirate So Brave
On the Seven Seas.
Выход
$ ./bin/read_file_into_words dat/captnjack.txt
reading words from : dat/captnjack.txt
This
is
a
tale
Of
Captain
Jack
Sparrow
A
Pirate
So
Brave
On
the
Seven
Seas.
Позвольте мне знать, если у вас есть какие-либо дополнительные вопросы, и я буду рад помочь.
Попробуйте 'printf ("% d \ n ", strlen (имя файла));' и дайте мне знать, что вы получаете. – user3386109
Вы можете посмотреть [** Читать из файла CSV и отдельно в строки **] (http://stackoverflow.com/questions/33761409/read-from-csv-file-and-separate-into-variable) –
Оператор печати дает мне 9, я также добавил код для удаления новой строки в конце строки (которая работала), но она все еще не может найти файл. – PresumablyZach