strlen()崩溃.exe

时间:2013-12-26 18:02:56

标签: c string.h

int main()
{
    int LengthofWord = strlen('word');
    printf("%s", LengthofWord);
}

由于某种原因,此代码崩溃了。我想检索字符串的长度(在本例中为字符串)以便稍后使用。为什么这段代码会崩溃?

由于

3 个答案:

答案 0 :(得分:4)

您的代码存在以下问题:

  • 这是无效的:'word''符号用于单个字符,例如'a'。你打算写"word"
  • LengthofWord的类型应为size_t而不是int,因为这是strlen返回的内容。
  • 您为printf使用了错误的格式字符串。您使用了适合字符串的%s。对于整数值,您应该使用%zu。但是,请注意某些运行时无法理解%zu
  • 您的主要签名不正确 - 应为int main(void)

所以你的完整程序应该是:

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

int main(void)
{
    size_t LengthofWord = strlen("word");
    printf("%zu", LengthofWord);
}

答案 1 :(得分:3)

应该是

... = strlen("word");

在C字符串文字中加入双引号。


同样strlen()返回size_t而不是int。所以整行应如下所示:

size_t LengthofWord = strlen("word");

最后打印出size_t使用转换说明符“zu”:

printf("%zu", LengthofWord);

"%s"需要一个0终止的char数组,一个“字符串”。


最后,最重要的是,使用

启动程序
int main(void)
{
  ...

并通过退回int

来完成它
  ...
  return 0;
}

答案 2 :(得分:2)

C中的'引号和"引号之间存在差异。使用字符"
改变

int LengthofWord = strlen('word');  
                          ^    ^
                          |    |
                          -----------Replace these single quotes with double quotes("")       

int LengthofWord = strlen("word");     

strlen会返回size_t类型。将其声明为size_t类型而不是int。同时将printf中的格式说明符更改为%zu

  printf("%d", LengthofWord);  

您的最终代码应该是

int main(void)
{
    size_t LengthofWord = strlen('word');
    printf("%zu", LengthofWord);

    return 0;
}