抛出未处理的异常:读取访问冲突

时间:2016-02-01 21:50:36

标签: c visual-studio visual-studio-2012

我正在学校为我的C班做作业,我遇到了一点障碍。

#include <stdio.h>

char stringToUpper(char * sName )
{
    while(*sName != '\0')
    {
        stringToUpper (* sName);
        ++* sName;
    }
}

int main()
{
    char str[50];
    char * sName;
    printf("Please enter your name ");
    scanf("%s", str);
    printf("Hello %s ", str);
    sName = str;
    stringToUpper(sName);
    printf("Name in uppercase: %s ", sName);
}

我已经尝试过寻找其他解决方案了,但是我发现其他人的问题都比我现在的水平要高得多,而且实际上根本无法遵循它。我在使用指针方面仍然有点新意,并且仍然对它们的工作方式感到有点困惑(只有几周的课程),所以我觉得问题与此有关。我几乎可以肯定这个问题与while语句有关。

这是我得到的错误:

  

抛出未处理的异常:读取访问冲突。

     

sName是0x41。

     

如果存在此异常的处理程序,则可以安全地继续该程序。

感谢先进,无论我收到什么帮助。

1 个答案:

答案 0 :(得分:1)

您的stringToUpper功能存在一些问题:

while(*sName != '\0')
{
    stringToUpper (* sName);
    ++* sName;
}
  • 您可以调用toupper更改为大写并将值分配回*sName,而不是让函数调用自身。事实上,您的电话是不正确的,因为您将char传递给期望char *的函数。在stringToUpper的下一次迭代中,它会尝试取消引用导致崩溃的无效指针。
  • 您应该递增sName(指向当前字符),而不是*sName

更正后的版本:

while(*sName != '\0')
{
    *sName=toupper(*sName);
    ++sName;
}