首页 > 解决方案 > 我不知道为什么这是代码给我一个读取访问冲突。取消引用指针并减去另一个字符应该在理论上起作用

问题描述

我不知道为什么这不起作用。该代码在 charToInt 函数中的 *c 存在问题,但应该是 c 中的合法声明。至少我是这么认为的。我很高兴能在这里学到新东西。

int charToint(char *c) {
    return *c - '0';  
}

int main(void) {
    char c = '3';
    printf("%d\n", charToint(c));
{

标签: cpointersdereferencechar-pointer

解决方案


您将 a 传递给char需要 a 的函数char *。你的编译器应该已经警告你了。然后将其值char解释为指针值并取消引用。取消引用无效指针会调用未定义的行为,在这种情况下会导致程序崩溃。

该函数最终尝试使用 a char,因此将其更改为接受 a char

int charToint(char c) {
    return c - '0';  
}

或者,您可以保留函数并传递一个指针:

printf("%d\n", charToint(&c));

推荐阅读