Я продолжаю получать RUNTIME ERROR при попытке передать вход [i] другой функции ... Не знаю, почему. Он должен передать адрес ввода [i] другому указателю в другой функции, поэтому я не знаю, где он поступил неправильно. Это должно быть что-то очень простое, что я не смог поймать ...Простая передача указателя на другую функцию FAILED
Редактировать: На самом деле моя программа просто остановилась, прежде чем передать массив и выйти.
void processInfixExp(const char * fileName)
{
char ** input = NULL, ** output = NULL;
int i = 0, numInput = 0;
char len;
char tempInput[100] = {0};
FILE * pFile = NULL;
if((pFile = fopen(fileName, "r")) == NULL)
{
printf("Cannot read file %s\n", fileName);
system("PAUSE");
exit(1);
}
while(fgetc(pFile) == '\n')
++numInput;
/* printf("%d\n", numInput); */
input = (char**)malloc(numInput * sizeof(char*));
output = (char**)malloc(numInput * sizeof(char*));
if(!input || !output)
{
printf("Memory allocation failed.\n");
system("PAUSE");
exit(1);
}
rewind(pFile);
for(i = 0; fgets(tempInput, MAXL, pFile) != NULL; ++i)
{
/* printf("%s\n", tempInput); */
len = strlen(tempInput);
while(len && tempInput[len-1])
tempInput[len-1] = '\0';
input[i] = strdup(tempInput);
printf("%s\n", input[i]); /* PRINTF SUCCESS */
}
fclose(pFile);
for (i = 0; i < numInput; ++i)
{
convertIntoPost (input[i], &output[i]);
printf (" input[%2zu]: %-25s output[%2zu]: %s\n", i, input[i], i, output[i]);
}
free(input), free(output);
}
void convertIntoPost(char * in, char ** out) /* TEST PASSING input[] */
{
printf("%s", in); /* NO SUCCESS */
}
Приятно ли подсчитывать количество последовательных строк новой строки в начале файла? Вы должны просмотреть цикл: 'while (fgetc (pFile) == '\ n') ++ numInput;' Вы также должны научиться запускать отладчик и/или узнать, как печатать значения ключа при прохождении программы , Глядя на 'numInput', вероятно, вы увидите значение 0, указывающее на проблему. «Любопытно, что вы показываете печать для« numInput », но вы не комментируете полученный результат. –
'while (len && tempInput [len-1]) tempInput [len-1] = '\ 0';' также интересен. –
Этот цикл также любопытен: 'while (len && tempInput [len-1]) tempInput [len-1] = '\ 0';' - это, вероятно, должно быть 'if', так как вы не настраиваете' len 'в цикле, поэтому после первой итерации условие должно быть ложным. –