gpt4 book ai didi

c - c 指针字符串的问题

转载 作者:行者123 更新时间:2023-11-30 19:29:22 25 4
gpt4 key购买 nike

:)我试图在 c 中击败字符串指针,所以我编写了这段代码,但没有得到我预期的结果。

我正在创建一个字符串变量,我想将其传递给一个函数来检查字符串长度是否大于 10。

这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
bool is_bigger_than_10(char *);

int main()
{
char *string1 = "";
int i = 0;
printf("Initial string: %s\n",&string1);
printf("Size is: %d\n",strlen(&string1));
printf("Give me one string: ");
scanf("%[^\t\n]s",&string1); //This scan allows me to enter string with spaces

printf("You write: %s\n", &string1);
printf("Size is: %d\n",strlen(&string1));
printf("String character by character:\n");
for(i = 0; i < strlen(&string1) ; i++)
{
printf("%c ",&string1[i]);
}

printf("\nNow let's check if it's bigger than 10\n");
printf("Answer is: %d",is_bigger_than_10(&string1));

return 0;
}

bool is_bigger_than_10(char *textx)
{
printf("%s --> %d > %d\n",&textx, strlen(&textx),10);
if(strlen(&textx) > 10)
{
return true;
}
else
{
return false;
}
}

预期输出应该是:

初始字符串:
大小为 0:
给我一根绳子:axel
你写:axel
字符串逐个字符:
a x e l
现在让我们检查一下它是否大于 10
a x e l --> 4 > 10
答案是:0

如果运行该代码并输入 axel 作为输入字符串,您将得到以下结果:

初始字符串:$0@
尺寸为 3:
给我一根绳子:axel
你写:axel
字符串逐个字符:a b c d e
a x e l
现在让我们检查一下它是否大于 10
' --> 3 > 10
答案是:0

有点奇怪,有人可以帮我纠正这个代码吗?

最佳答案

这里发生了两件事:

首先,你的 char 指针需要指向某个地方。用线

char *string1 = "";

您创建了一个指向字符串文字的指针,但您无法对其进行写入。 (显然你可以,考虑到你的输出,但你只是幸运地在允许它的系统上。)创建一个字符缓冲区:

char string1[200] = "";

并且最好在读取字符串时强制执行恒定的缓冲区限制。

其次,您不需要所有这些&& 并不是一个神奇的标记,您必须将其添加到所有参数之前。

& 获取变量的地址并将其作为指针传递。当被调用函数需要通过指针更改变量时,您需要这样做。打印不需要更改任何内容,因此除非您想使用 %p 打印变量的地址,否则不应传递地址。 (在您的程序的特殊情况下,您可以通过搜索和替换删除所有&符号。)

扫描时,如果将输入转换为数字或扫描字符,则需要更改变量。异常(exception)情况是当您使用 %s%[...] 扫描字符串时:这里,您传递一个 char 缓冲区(作为指向其第一个元素的指针)和然后函数填充该缓冲区。

scanf 和 printf 的问题是格式字符串后面的参数是可变的,这意味着它们将接受任何参数而不进行类型检查。好处是,大多数编译器可以判断格式字符串是否与参数匹配,并在您启用它们时发出警告。帮自己一个忙,就这么做吧。

(警告还会告诉您,参数类型已知的函数中存在类型不匹配,例如您的 is_bigger_than_10。)

关于c - c 指针字符串的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52918763/

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