gpt4 book ai didi

c - 为什么处理指向字符串的指针后输出为空?

转载 作者:行者123 更新时间:2023-12-01 15:47:49 25 4
gpt4 key购买 nike

我编写了通过两种方式将用户输入的字符串转换为小写的代码。

//method 1:
void xstrlwr(char*p)
{
while(*p!='\0')
{
if(*p>=65&&*p<=90)
{
*p=*p+32;
}
p++;
}
printf("%s",p);
}

//method 2:
void xstrlwr(char*p)
{
int l,i;
l=strlen(p);
for(i=0;i<=l;i++)
{
if(p[i]>=65&&p[i]<=90)
{
p[i]=p[i]+32;
}
}
printf("\n%s",p);
}

这是预期的输出

Input : WElcome TO sTack OverFLow
Expected output: welcome to stack overflow

代码1运行不正确(打印字符串有空输出),
而代码 2 运行完美(它输出小写字符串)。
所以我的问题是为什么第一个输出为空,尽管两个代码在逻辑上是相同的,只是具有不同的符号?

最佳答案

第一个代码片段中的 printf 没有打印任何内容,因为指针指向 NUL 终止符。 (请注意该代码段中使用 p++。)

在第二个代码片段中,您没有更改传递给函数的参数,因此 p 仍然指向字符串的开头。

这两个函数的“本质”是相同的,尽管我更喜欢第一个。这里的故事的寓意是在函数调用站点打印结果,而不是在函数本身。

最后请注意,这两种算法仅适用于使用 ASCII(或近亲)进行字符编码的平台。为此,C 标准库提供了 tolower 来完成这项工作。

关于c - 为什么处理指向字符串的指针后输出为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48003247/

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