【问题标题】:C language strlen function with new line character in the stringC语言strlen函数,字符串中有换行符
【发布时间】:2020-09-20 11:55:59
【问题描述】:

通常 C 语言中的 strlen() 函数返回 unsigned int 但如果字符串有换行符,那么输出会是什么? 例如 : C语言中strlen("stack\n")的输出是什么?

【问题讨论】:

  • 关于:C语言中的strlen()函数返回unsigned int不,它返回的是size_t,这是unsigned long int的别称
  • @user3629249 size_t 可能是 unsigned longunsigned 或其他一些 unsigned 类型,其范围至少为 [0--65535]。
  • \n 的存在与strlen 的返回类型有什么关系?似乎完全无关。
  • 不相关。 man strlen 或直接谷歌给出了答案。

标签: c string newline strlen


【解决方案1】:

strlen("stack\n") --> 6. '\n' 没什么特别的。

【讨论】:

    【解决方案2】:

    "strlen("stack\n") 的输出是什么?"

    6。换行符,例如除'\0' (NUL) 之外的任何字符都被视为其他任何字符。

    "一般C语言中的strlen()函数返回unsigned int"

    这是不正确的。 strlen() 返回一个size_t 值,它与unsigned int 完全不同,尽管在大多数实现中size_t 可以是unsigned int 的别名。但保持差异很重要。


    注意:如果字符串存储在 char 数组中(它不是字符串文字并且具有不可变)并且您想要删除换行符,则可以使用 strcspn()

    char a[7] = "stack\n";        // 7 elements, not 6. Required to store terminating NUL.
    
    printf("%zu\n", strlen(a));   // This will print 6.
    
    a[strcspn(a, "\n")] = 0;      // Replace newline with NUL.
    
    printf("%zu", strlen(a));     // This will print 5.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-25
      • 2021-03-29
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多