为什么strlen会导致C中的分段错误?

石头

(警告)是的,这是我正在做的作业的一部分,但是我现在非常绝望,不,我不是在找你们为我解决问题,但是任何提示将不胜感激!(/警告)

我正在尝试制作一个交互式菜单,用户应输入一个表达式(例如“ 5 3 +”),并且程序应检测到它的后缀表示法,很遗憾,我遇到了分段错误错误,我怀疑它们与strlen函数的使用有关

编辑:我能够使其工作,首先该char expression[25] = {NULL};
成为char expression[25] = {'\0'};

当调用determine_notation函数时,我[25]从数组中删除了,就像这样:determine_notation(expression, expr_length);

就像之前的评论中提到的那样,input[length]我更改后部分也是如此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;
    }
}
谢尔盖·卡里尼琴科(Sergey Kalinichenko)

您可能会收到警告,说明您char在此调用中将a转换为指针:

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

这就是问题所在-您的代码引用了数组末尾不存在的元素(未定义的行为),并尝试将其传递给strlen

由于strlen采用指向字符串开头的指针,因此调用需要

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么与pthread链接会导致分段错误?

为什么glibc的fclose(NULL)会导致分段错误而不是返回错误?

为什么同时链接sdl2和udev会导致分段错误?

为什么以联合方式访问指针会导致分段错误?

为什么用fast_executemany = True调用cursor.executemany()会导致分段错误?

为什么取消引用内存别名区域的C程序会导致分段错误?

为什么堆栈推送会导致分段错误?

为什么动态的字符串指针数组会导致分段错误?

为什么访问threadprivate变量会导致分段错误?

为什么将项目添加到链表会导致分段错误?

为什么继承会导致共享内存分段错误?

为什么释放内存会导致分段错误?

为什么将文件指针分配给结构指针成员会导致分段错误?

为什么与I / O相关的设置会导致分段错误?

为什么弹出堆栈中的最后一个元素会导致C中的分段错误?

为什么此代码会导致分段错误

C ++ Linux:在类中声明数组会导致分段错误

如何调试为什么我的C代码会导致分段错误?

为什么使用atoi命令行参数会导致分段错误

为什么会导致错误?

尝试在循环中访问数组元素会导致分段错误,为什么?

为什么mov rax,cr0会导致nasm 64位中的分段错误

为什么命令行参数声明会导致分段错误

为什么这个 AVX 内在会导致“分段错误”,而不是 GCC?

为什么使用 paho.mqtt.c 发送此消息会导致分段错误?

为什么使用 malloc 创建的指针赋值会导致分段错误

为什么声明长度为 INT_MAX 的 int 数组会导致分段错误?

为什么这个双变量会导致分段错误?

为什么以下会导致分段错误?