【发布时间】:2013-04-08 10:40:34
【问题描述】:
我的代码在这里:
char* kropecka(char* tab)
{
int a=0,b=0;
char* zwr;
zwr=(char*)malloc(30*sizeof(char));
for(a;strlen(tab);a++)
{
if(tab[a]!='.')
{
if(isupper(tab[a]))
zwr[b]=tolower(tab[a]);
if(islower(tab[a]))
zwr[b]=toupper(tab[a]);
b++;
}
}
zwr[b]='\0';
return zwr;
}
没有错误、警告或类似的东西。但是当我给他一些字符串时程序崩溃了:
--------------- Microsoft Visual C++ 调试库 --------------------------------------- 调试断言失败!
程序:...s\Visual Studio 2010\Projects\C_homework\Debug\C_homework.exe 文件: f:\dd\vctools\crt_bld\self_x86\crt\src\isctype.c 行:56
表达式:(无符号)(c + 1)
有关您的程序如何导致断言失败的信息, 请参阅有关断言的 Visual C++ 文档。
(按重试调试应用程序)
---------------中止重试忽略
编译器:Visual Studio 2010 包含的库:stdio.h、string.h、ctype.h、stdlib.h(用于 main() 中的 system() 函数)。
【问题讨论】:
-
执行tolower() next if(islower) 匹配执行toupper(),使用else
-
在您的“if (isupper()...; if (islower()...;”代码中,您似乎正在尝试切换大小写,但这总是会导致大写。您可以通过在第二个
if上添加else将其转换为适当的切换。
标签: c string uppercase lowercase