为什么strlen会导致C中的分割断层



(警告)是的,这是我正在从事的任务的一部分,但是我在这一点上完全拼命了,不,我不是在寻找你们为我解决它,但是任何提示都将不胜感激!(/警告)

我几乎正在尝试制作交互式菜单,用户是为了输入表达式(例如" 5 3 &quort"),并且该程序应检测到它在后缀符号中,不幸的是,我已经在细分了故障错误,我怀疑它们与使用 strlen 函数有关。

编辑:我能够使它起作用,首先是char expression[25] = {NULL};
变成char expression[25] = {''};

,当调用determine_notation函数时,我从我所传递的数组中删除了[25]determine_notation(expression, expr_length);

也更改为input[length-2]input[length],因为就像上一条评论中提到的input[length] == ''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("%dn", notation);
}
int determine_notation(char input[25], int length) // Determines notation
{
    if(isdigit(input[0]) == 0)
    {
        printf("This is a prefix expressionn");
        return 0;
    }
    else if(isdigit(input[length]) == 0)
    {
        printf("This is a postfix expressionn");
        return 1;
    }
    else
    {
        printf("This is an infix expressionn");
        return 2;
    }
}

您可能会收到警告,解释您正在将char转换为此调用中的指针:

expr_length = strlen(expression[25]);
//                             ^^^^

这是问题 - 您的代码正在引用一个不存在的元素,而不是数组的末端(不确定的行为),并试图将其传递给strlen

由于strlen将指针用于字符串的开头,因此呼叫需要为

expr_length = strlen(expression); // Determining size of array input until the NULL terminator

相关内容

  • 没有找到相关文章

最新更新