(Предупреждение) Да, это часть задания, над которым я работаю, но я совершенно отчаянна в этом вопросе, и нет, я не ищу, чтобы вы, ребята, решили это для меня, но любой намек был бы очень оценен!/Предупреждение)Почему strlen вызывает ошибку сегментации в C?
Я в значительной степени пытаюсь создать интерактивное меню, пользователь должен ввести выражение (например, «5 3 +»), и программа должна обнаружить, что это в постфиксной нотации, к сожалению, я был получение ошибок ошибок сегментации, и я подозреваю, что они имеют какое-то отношение к использованию функции strlen.
EDIT: Я был в состоянии сделать его работу, сначала
char expression[25] = {NULL};
линия
становитсяchar expression[25] = {'\0'};
И при вызове функции
determine_notation
я удалил[25]
из массива я передаю так:determine_notation(expression, expr_length);
Также
input[length]
часть I изменена наinput[length-2]
, так как упоминалось в предыдущем комментарии,input[length] == '\0'
иinput[length--] == '\n'
,Всего благодарностей за помощь!
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int determine_notation(char input[25], int length);
int main(void)
{
char expression[25] = {NULL}; // Initializing character array to NULL
int notation;
int expr_length;
printf("Please enter your expression to detect and convert it's notation: ");
fgets(expression, 25, stdin);
expr_length = strlen(expression[25]); // Determining size of array input until the NULL terminator
notation = determine_notation(expression[25], expr_length);
printf("%d\n", notation);
}
int determine_notation(char input[25], int length) // Determines notation
{
if(isdigit(input[0]) == 0)
{
printf("This is a prefix expression\n");
return 0;
}
else if(isdigit(input[length]) == 0)
{
printf("This is a postfix expression\n");
return 1;
}
else
{
printf("This is an infix expression\n");
return 2;
}
}
'вход [длина]' 'это '\ 0'' (и:' 'входной [длина-1 ] 'is' '\ n'' И: 'expression [25];' индексы за пределами размера объекта) – wildplasser
strlen получает строку (указатель-на-первый символ), а не символ. –
'выражение char [25] = {NULL};' не имеет значения. замените на '{'\ 0'}' или '" "' – Stargateur