当前位置: 首页 > 知识库问答 >
问题:

警告,同时使用printf(...)输出返回strlen(字符串)[重复]

常飞翼
2023-03-14

警告:它说要将%d更改为%I64d

char string[DIM]="hello";

printf("%d",strlen(string));

共有3个答案

章建木
2023-03-14

strlen不返回int。但printf格式及其参数必须匹配。所以说

printf("%d", (int)strlen(string));

只要你的字符串不超过32767个字符,你就没事。

首选的解决方案是

printf("%zu", strlen(string));

但听起来您的仿古编译器不支持%zu。(我很同情你:我有一个编译器工作了很长时间,也有同样的问题。)

如果您担心超过32767个字符的字符串,请参阅其他答案,或者这个问题:如何使用printf系列可移植地打印size_t变量?

於功
2023-03-14

%dprintf格式说明符需要int。但是,strlen的返回值属于size\u t类型。

size\u t的正确printf格式说明符是%zu

这一行应该工作:

printf( "%zu", strlen(string) );
尉迟正平
2023-03-14

正如@AndreasVinzel回答的"%zu"是最正确的。但是你写道:

当我在格式中输入%zd警告:未知转换类型字符“z”时,它输出此警告

如果您的实现不支持“%z…”格式您需要将strlen的结果转换为可能的最大无符号整数。

printf( "%llu", (unsigned long long)strlen(string) );

但是如果您的实现不支持“%llu”

printf( "%lu", (unsigned long)strlen(string) );

最后的办法是:

printf( "%u", (unsigned)strlen(string) );
 类似资料:
  • 我试图使这个printf工作,但我不断得到一个异常抱怨第一个'%'运算符。我像这样多次使用printf,从来没有出现过问题。我正在使用Eclipse。 为什么我的陈述不起作用,我如何让它起作用? 在第18行,第二个用于表示文本 (不一定是程序中的实际代码) 免责声明:这是一个家庭作业,但我已经为它写好了完整的代码。我只需要克服这个错误,并得到我的老师的许可,就可以发布这样的问题。

  • 我对编码非常陌生,刚刚接触过静态方法,所以我为这些愚蠢的错误提前道歉。在main下调用该方法时,该方法应该显示一个三角形,但我得到的控制台是空的,没有输出。但是,如果我将此写在main下: 然后,三角形将显示在控制台中,但是对于这个赋值,字符串/三角形必须仅通过使用来调用

  • 我集成了yii框架的php代码出现了以下错误。 警告:在C:\AppServ\www\edusec\index中输入“\”(ASCII=92)state=0时出现意外字符。php第15行 分析错误:语法错误,C:\AppServ\www\edusec\index中出现意外的T_字符串。php第15行 代码: 我正在用Appserv 2.6.0(Php 6)在视窗7上工作。

  • 最近,我一直在尝试构建一个程序,它可以完成4件事: 1) 从键盘输入一个单词。 2)用包含字母表字母的字符串的上下文检查这个单词的上下文。 3)将给定单词的字母与字母表字符串的字母进行比较,只要匹配,它将返回该字母在字母表字符串中的位置1。(例如。word='a'位置=1,因为'a'是第一个字母) 4) 获取所有这些位置的总和。(例如word='abc'总计=6) 现在让我向您展示我用代码编写的内

  • 根据这个问题的答案:停止Excel自动将某些文本值转换为日期我正在尝试使用python的CSV模块创建一个CSV文件,某些字段的格式为 但是,我无法让CSV编写器生成这样的输出。如果我使用默认的 csvwriter(没有特殊参数)并预先格式化我的数据,它会尝试引用我的所有引号,并且我得到的输出如下所示: 如果我将csv编写器的引用级别设置为QUOTE_NONE,那么我得到一个“错误:需要转义,但没

  • 问题内容: 我正在处理DomDocument,这基本上是SOAP Web服务的XML结果。给你一个主意,这就是它的样子 是的,ChildNode的值是一个已转义输出的字符串,并且是打包在此XML中的XML。我通常执行DomDocument处理,例如 在检查了上面的代码之后,您意识到即使节点为ParentNode和NodeName节点返回了正确的值,但在访问getNodeValue()时它仍返回了空