gpt4 book ai didi

c - c中的strlen函数

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

这听起来有点傻,但我很困惑。我知道 strlen() 会返回 c 中字符数组的大小。但是指向字符的指针发生了一些不同的事情。这是我的代码:

void xyz(char *number)
{
int i = 0;
int length = strlen(number) - 2;
while(i <= length)
{
printf("Number[]: %c",number[i]);
i++;
}
}

这会打印我输入的整个数字(例如:12345),但如果我删除 -2,结果就不一样了。谁能告诉我我错过了什么?

最佳答案

很有可能您正在对使用 fgets 或类似输入函数获得的字符串执行此操作。在那种情况下,它很可能在末尾仍然有换行符。

如果您临时将代码更改为:

void xyz (char *number) {
int i = 0, length = strlen (number);
while (i < length)
printf ("Number[%d]: %c (%d)", i, number[i], number[i]);
i++;
}
}

这还应该显示所有字符的数字代码。

在你的函数中编码类似 - 2 的问题是它不适用于:

xyz ("123");

因为它会提前停止,所以只打印出 12调用者 应该使用有效数据进行调用,这意味着它应该在调用之前将值调整为数字字符串。


您可以在以下程序中看到这种情况:

#include <stdio.h>
#include <string.h>

void xyz (char *number) {
int i = 0, length = strlen(number) - 2;
while(i <= length)
{
printf("Number[%d]: %c (%d)\n",i, number[i], number[i]);
i++;
}
puts ("===");
}

void xyz2 (char *number) {
int i = 0, length = strlen(number);
while(i < length)
{
printf("Number[%d]: %c (%d)\n",i, number[i], number[i]);
i++;
}
puts ("===");
}

int main (void) {
char buff[100];
printf ("Enter number: ");
fgets (buff, sizeof (buff), stdin);
xyz (buff);
xyz ("12345");
xyz2 (buff);
xyz2 ("12345");
return 0;
}

如果您输入 98765,它的(带注释的)输出是:

Enter number: 98765
Number[0]: 9 (57)
Number[1]: 8 (56)
Number[2]: 7 (55) # Your adjustment works here because of the newline.
Number[3]: 6 (54)
Number[4]: 5 (53)
===
Number[0]: 1 (49)
Number[1]: 2 (50)
Number[2]: 3 (51) # But not here, since it skips last character.
Number[3]: 4 (52)
===
Number[0]: 9 (57)
Number[1]: 8 (56)
Number[2]: 7 (55) # Here you can see the newline (code 10).
Number[3]: 6 (54)
Number[4]: 5 (53)
Number[5]:
(10)
===
Number[0]: 1 (49)
Number[1]: 2 (50)
Number[2]: 3 (51) # And proper numeric strings work okay.
Number[3]: 4 (52)
Number[4]: 5 (53)
===

如果您正在寻找一个强大的用户输入函数来解决这个问题(并避免危险的事情,例如无限制的 scanf("%s")gets) ,我在 SO 的其他地方(实际上是右 HERE )从我的武器库中抽取了一个。

关于c - c中的strlen函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7990332/

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