2015-11-07 5 views
4

Я пытаюсь создать массив «строк» ​​фиксированной длины в C, но у вас были небольшие проблемы. Проблема, которую я испытываю, заключается в том, что я получаю ошибку сегментации .Как создать массив строк с фиксированной длиной в C?

Цель моей программы: Я хотел бы задать строки массива по индексу, используя данные, считанные из текстового файла. Вот это логи моего текущего кода (я прошу прощения, что я не мог добавить весь свой код, но это довольно длительный, и, скорее всего, просто вызвать путаницу):

//"n" is set at run time, and 256 is the length I would like the individual strings to be 
char (*stringArray[n])[256]; 
char currentString[256]; 

//"inputFile" is a pointer to a FILE object (a .txt file) 
fread(&currentString, 256, 1, inputFile); 
//I would like to set the string at index 0 to the data that was just read in from the inputFile 
strcpy(stringArray[i], &currentString); 
+0

Вы объявляете 'stringArray' как массив указателей' n' для массива из 256 символов. Это не звучит ... «нормально». –

+0

Может быть, он уже здесь ответил? [C Программа: путаница новичков при работе с массивами строковых символов] (http://stackoverflow.com/questions/10055946/c-program-newbie-confusion-on-working-with-character-string-arrays) – jayant

+0

@JoachimPileborg Да , Я обнаружил, что это тоже немного странно. Это было основано на втором ответе здесь: http://stackoverflow.com/questions/1088622/how-do-i-create-an-array-of-strings-in -c – user3495690

ответ

4

Обратите внимание, что если ваша строка может быть 256 длинными символами, вам нужно, чтобы его контейнер имел длину 257 байт, чтобы добавить конечный нулевой символ \0.

typedef char FixedLengthString[257]; 
FixedLengthString stringArray[N]; 
FixedLengthString currentString; 

Остальная часть кода должна вести себя так же, хотя некоторые отливки могут быть необходимы, чтобы угодить функции, ожидающие char* или const char* вместо FixedLengthString (которые могут быть рассмотрены различные типы в зависимости от флагов компилятора).

+0

Спасибо, похоже, это имеет смысл. Я проверю это и вернусь к вам! – user3495690

+0

Знаете ли вы, что мне нужно будет изменить параметр fread second на 257 для того, чтобы в нем было внесено предложение? – user3495690

+0

№ Размер контейнера отличается от размера прочитанного файла. Все, что вам нужно, это убедиться, что контейнер такой же большой или больший, чем прочитанный файл. – Cyan

 Смежные вопросы

  • Нет связанных вопросов^_^