gpt4 book ai didi

c - 在c中获取字符串长度的问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:45:39 26 4
gpt4 key购买 nike

这是代码:

void main()
{ char strvek[500];

printf("Mata in ett stort tal: ");
scanf("%s", &strvek);

size_t len1 = strlen(strvek);
printf("%d",&len1);
}

程序结束打印 len1 的内存地址。我想将字符串的长度存储在 len1 中。例如,如果输入“hello”,我想输入整数 5。

最佳答案

您的代码存在以下问题:

  • scanf 确实获取地址,但由于 strvek 是一个数组,因此在传递给函数时它会“衰减”为指针
  • 用户可以键入比您的缓冲区容纳的字符更多的字符,从而导致缓冲区溢出,并且
  • printf 不需要 int 的地址(您的代码有未定义的行为)

这是解决前两个问题的方法:

scanf("%499s", strvek); // Limit the size to 499 chars + '\0'; no ampersand in front of strvec

这是解决最后一个问题的方法:

printf("%d", len1); // No ampersand

一开始可能有点难以记住何时使用带有 I/O 函数的 & 符号。通常,请记住 scanf 需要除字符串以外的符号,而 printf 不需要符号,除了 %p 格式说明符(在这种情况下您需要将指针转换为 void*)。

关于c - 在c中获取字符串长度的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21801305/

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