Ниже представлен раздел Tokenizer, который я построил. Пользователь набирает строку, которую они хотят tokenize, эта строка хранится в массиве char, а нулевой символ ('\ 0') помещается, как только заканчивается строка. Этот раздел кода, кажется, работает нормально после тестирования его несколько раз.Петля, кажется, заканчивается перед достижением нулевого символа в C
Проблема я получаю происходит позже в коде, когда я делаю массив (tokenArray) массивов (newToken). Я использую функции, чтобы получить количество токенов и длину токена.
Я ввел строку «калькулятор карандаша для проверки». Затем я сохраняю каждый токен в массив. Проблема заключается в том, когда я иду печатать содержимое массива, цикл, который у меня печатает, останавливается раньше, чем нужно.
Вот пример ввода/вывода. Мои комментарии (не в коде) отметил
$testing pencil calculator //string entered
complete index: 0 //index of the entire array, not the tokenized array
token length: 7 //length of 1st token "testing"
pointer: 0xbf953860
tokenIndex: 0 //index of the token array (array of arrays)
while loop iterations: 4 //number of times the while loop where i print is iterated. should be 7
test //the results of printing the first token
complete index: 8
token length: 6 //next token is "pencil"
tokenIndex: 1
while loop iterations: 5 //should be 6
penci //stops printing at penci
complete index: 15
token length: 10 //final token is "calculator"
pointer: 0xbf953862
tokenIndex: 2
while loop iterations: 5 //should be 10
calcu //stops printing at calcu
для жизни меня, я просто не могу понять, почему цикл, пока выход до того, как предполагается. Я сомневаюсь, что это единственная проблема с моей методологией, но пока я не смогу это понять, я не могу обращаться к другим ошибкам.
Ниже приводится часть моего кода, который отвечает за это:
от основной:
completeString[inputsize] = '\0';
char tokenArray[numTokens+1];
tokenArray[numTokens] = '\0';
putTokensInArray(tokenArray, completeString);
метод, где я получаю сообщение об ошибке:
char ** putTokensInArray(char tokenArray[], char * completeString){
int completeIndex = 0;
int tokenIndex = 0;
while(tokenArray[tokenIndex] != '\0'){
int tokenLength = tokenSize(completeString, completeIndex);
char newToken [tokenLength+1];
newToken[tokenLength] = '\0';
tokenArray[tokenIndex] = *newToken;
printf("\ncomplete index: %d", completeIndex);
printf("\ntoken length: %d", tokenLength);
printf("\ntokenIndex: %d\n", tokenIndex);
int i = 0;
while(newToken[i] != '\0'){
newToken[i] = completeString[i + completeIndex];
i++;
}
completeIndex += (tokenLength+1);
printf("while loop iterations: %d\n", i);
for(int j = 0; newToken[j] != '\0'; j++){
printf("%c", newToken[j]);
}
tokenIndex++;
tokenLength = 0;
}//big while loop
}//putTokensInArray Method
Я попробовал несколько но просто не может понять его. Я новичок в C, поэтому вполне возможно, что я делаю ошибки указателя или получаю доступ к памяти, которой я не должен быть; на этой ноте, как мне реализовать malloc() и free()? Я читаю об этом и, кажется, работаю, но я не могу реализовать эти функции.
'* newToken' вызывает неопределенное поведение (вы читали первый символ из' newToken', но вы никогда не инициализируется содержание) –
Кроме того, ваша функция объявляется return 'char **', но у вас нет оператора 'return' –
Я еще не выполнил оператор return. Так что вы говорите, что мне нужно инициализировать содержимое массива, когда я его создаю? Итак, я бы просто зациклил массив и поместил случайное значение во все индексы? –