这是代码:

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

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*)。

10-07 14:54