【问题标题】:strlen() giving wrong resultstrlen() 给出错误的结果
【发布时间】:2013-06-14 12:10:34
【问题描述】:

目前我正在开发一个 iOS 应用程序,我需要将 NSString 转换为 char *。为此,我使用了以下代码:

NSString *str = @"Hello ! How Are You ???";
char *as = (char *)[[str dataUsingEncoding:NSUTF8StringEncoding] bytes];
int a = strlen(as);
NSLog(@"Length using: -length  : [%d]",[str length]);
NSLog(@"Length using: strlen() : [%d]",a);

但问题是我的长度不同。

输出:

Length using: -length  : [23]
Length using: strlen() : [33]

我一遍又一遍地检查它。但有时我会得到正确的输出。但大多数时候我得到了错误的结果。

有什么问题?我的代码有什么错误吗?

请帮助我,在此先感谢

【问题讨论】:

  • 除了答案中给出的原因外,请注意,只有当字符串包含 1-127 范围内的 ASCII 字符时,两个长度才会相等。

标签: ios nsstring strlen string-length


【解决方案1】:

看起来 dataUsingEncoding: 末尾不包含 '\0' 并且 strlen 依赖它。请改用char *as = (char *)[str cStringUsingEncoding:NSUTF8StringEncoding];。它给出了正确的结果。

【讨论】:

  • 更简单:char *as = [str UTF8String].
  • @MartinR:感谢您的评论。
  • 感谢您的回复,尽管我没有得到问题。它解决了我的问题:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 2011-11-15
  • 2019-02-06
  • 2014-01-30
  • 2018-08-01
  • 2016-08-30
  • 1970-01-01
相关资源
最近更新 更多