gpt4 book ai didi

c - 字符串使用指针将小写字母转换为大写字母,但以下代码会引发错误

转载 作者:行者123 更新时间:2023-11-30 20:57:13 25 4
gpt4 key购买 nike

我想通过指针将小写字母转换为大写字母。下面的代码不起作用,它会引发一些错误。

#include<stdio.h>

int main()
{
char somearray[10]; char mask;
mask = 1 << 5;
mask = ~mask;
char *someptr;
gets(somearray);
puts(somearray);
someptr =&somearray[0];

while (*someptr != '\n')
{
*someptr = *someptr & mask ;

someptr++;
}
printf("%s",someptr);
return 0;
}

出现错误:

not able to compile , if compiled runtime error

即使下面的代码也不起作用:

#include <stdio.h>

int main()
{
char somearray[10];
char mask;
char *someptr;

mask = 1 << 5;
mask = ~mask;

fgets( somearray, sizeof(somearray), stdin ); /* gets() is suspect: see other reactions */
puts(somearray);
for ( someptr = somearray; *someptr != '\0';someptr++)
{
*someptr &= mask ;
}

printf("%s",someptr);



return 0;
}

输入:abcd 输出:abcd.,预期:ABCD

最佳答案

gets() 不会在数组中存储换行符,因此循环将超出数组末尾并访问和修改不应该的内存。使用 scanf() 并限制读取的字符数以防止缓冲区溢出(如果真的是 C++,请使用 std::getline()std::string):

scanf("%9s", somearray);

并在第一个空字符处终止循环:

while (*someptr != '\0')

您需要在循环后将 somearray 传递给 printf(),因为 someptr 将指向 的末尾>somearray 并且只会打印一个空字符串。

<小时/>

值得一读:warning:gets function is dangerous

关于c - 字符串使用指针将小写字母转换为大写字母,但以下代码会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11461227/

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