这是代码:
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
s的地址(您的代码具有未定义的行为)
以下是解决前两个问题的方法:
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*
)。