Я искал и читал какое-то время, и я не понимаю, почему это не сработает.Передача 2d массивов по ссылке в C
Я передаю массив 2d, используя &
, чтобы передать адрес первого места в памяти. Функция принимает char *tokens
указатель на эту ячейку памяти.
Функция:
void printOutput(FILE* template, char* tokens)
{
char c = fgetc(template);
while(c != EOF)
{
if(c != '$')
{
printf("%c", c);
}
else
{
c = fgetc(template);
int charVal = c-'0';
if(charVal >= 0 && charVal <= 9)
{
printf("%d" , charVal);
printf("%s" , tokens[charVal]);
}
}
c = fgetc(template);
}
printf("\n\n");
}
Функция вызывается так:
printOutput(template, &tokens[0]);
Если я ставлю код функции в основной функции вместо вызова на printOutput
функции, выход правильно отображается.
Из чего я могу сказать, что где-то между вызовом функции и функционирующей функцией происходит что-то, что превращает мой tokens[][]
в массив всех (null)
.
Я считаю, что я обращаюсь к нему неправильно и надеюсь, что кто-то может помочь. При необходимости я могу предоставить больше кода.
Я очень ценю любую помощь!
Из-за ответов, помогающих, но все же не решая проблему, я прибегаю к добавлению функции main()
из своего кода.
int main(int argc, char *argv[])
{
FILE *template = NULL;
FILE *data = NULL;
char input[INPUT_LENGTH];
template = fopen("template.txt", "r");
if (template != NULL)
{
data = fopen("data.txt", "r");
if (data != NULL)
{
char input[INPUT_LENGTH];
while (fgets(input, INPUT_LENGTH, data))
{
char *token = NULL;
char *tokens[INPUT_LENGTH][FIELD_LENGTH];
int pos = 0;
token = strtok(input, "|");
while(token != NULL)
{
tokens[pos][0] = token;
token = strtok(NULL, "|");
pos++;
}
printOutput(template, tokens[INPUT_LENGTH][FIELD_LENGTH]);
rewind(template);
}
fclose(data);
}
fclose(template);
}
return EXIT_SUCCESS;
}
только теперь я могу взять на себя вопрос имеет отношение к char *tokens[INPUT_LENGTH][FIELD_LENGTH];
декларации, но я совершенно не уверен в этой точке.
Каков тип 'токенов' на сайте вызова? – immibis
fgetc() фактически возвращает int. EOF - это int. поэтому сравнение char с int не будет работать должным образом. Предложите сменить 'char c' на 'int c' – user3629249
. Выведенный код несовместим с тем, какой символ в файле читается каждым fgetc(). предлагая управлять циклом «while» (EOF! = (c = fgetc (template)) », и удаление всех других вызовов в fgetc() – user3629249