gpt4 book ai didi

c - "?"转换成大小写时变成"1"

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:56 25 4
gpt4 key购买 nike

这是我的代码,用于更改字符大小写的函数。例如“ABC”会变成“abc”,反之亦然。

char *flipCase(const char *src){

char *output;
output = malloc(sizeof(src));
//Copy source to output
strcpy(output,src);
int i = 0;
//Check if the case is lower or upper
while(output[i] != '\0')
{
//Check if it's alphabetic
if (isalpha(output[i]))
{
//if it's upper case
if (isupper(output[i]))
{
//Convert to lower case and increment i
output[i]= tolower(output[i]);
i++;
}
//if it's lower case
if (islower(output[i]))
{
//Convert to upper and increment i
output[i]=toupper(output[i]);
i++;
}

}
//Else, skip it
else
{
i++;
}

}
return output;}

在大多数情况下,这对我来说似乎没问题。但是,当用“Hello World,你好吗?”对其进行测试时。我期待着“ Hello World ,你好吗?”但是我的程序给出了“ Hello World ,你好吗”注意最后的“1”而不是“?”。是什么导致了这个问题?我该如何解决?

最佳答案

缓冲区分配不正确,导致缓冲区溢出:

output = malloc(sizeof(src));

sizeof 总是返回一个常量(除非应用于 VLA),因此它不会为您提供字符串的长度。你想要的是 strlen( src ) + 1

关于循环分解的其他答案在抽象层面上有一点,但你的循环似乎并不正确。它总是转到下一个字符,它永远不会检查同一个字符两次,它永远不会离开缓冲区的末尾(假设缓冲区首先是有效的)。控制流程有点奇怪。

关于c - "?"转换成大小写时变成"1",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19825697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com