我正在学校为我的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。
如果存在此异常的处理程序,则可以安全地继续该程序。
感谢先进,无论我收到什么帮助。
答案 0 :(得分:1)
您的stringToUpper
功能存在一些问题:
while(*sName != '\0')
{
stringToUpper (* sName);
++* sName;
}
toupper
更改为大写并将值分配回*sName
,而不是让函数调用自身。事实上,您的电话是不正确的,因为您将char
传递给期望char *
的函数。在stringToUpper
的下一次迭代中,它会尝试取消引用导致崩溃的无效指针。sName
(指向当前字符),而不是*sName
。更正后的版本:
while(*sName != '\0')
{
*sName=toupper(*sName);
++sName;
}