例如,
#include <stdio.h>
int main (int argc, const char * argv[]) {
char out = printf("teststring");
printf("%d\n", out);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
会回来的teststring10.任何人都知道如何摆脱10?
提前致谢.
让我们看看你的代码:
#include <stdio.h>
int main (int argc, const char * argv[]) {
char out = printf("teststring");
printf("%d\n", out);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
并改变它:
#include <stdio.h>
int main (int argc, const char * argv[]) {
const char *str = "teststring";
int out = printf("%s", str);
printf("\nPrintf wrote %d bytes when printing %s\n", out, str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译/运行已编辑的版本,您应该立即看到差异.修改str然后编译的长度并再次运行它.
现在,只需对原始代码进行微小更改:
#include <stdio.h>
int main (int argc, const char * argv[]) {
char out = printf("teststring\n");
printf("%d\n", out);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你现在可以看到,你正在打印两种不同的东西,并且out已经变成11,因为添加了换行符.实际上没有任何东西落后于此.然后更改%d为%c(out在您的示例中为正确的格式说明符)并注意区别.ASCII(11)是一个垂直选项卡(见这里).YTMV(您的终端可能会有所不同).在这里,您打印了一个字符,而不是整数的字符表示.
实际的类型即printf()返回是int,它是一个整数.这样做的原因是您确切知道printf()实际打印的字节数.这对于该系列函数来说是典型的,但对于函数更有用,snprintf()您可以知道它是否无法将任何给定格式的整个长度打印到缓冲区.请注意,返回类型是有符号的,它可以是负数,因此您选择存储其值的存储类型非常重要,特别是如果您使用该值而假设它大于或等于零.
这是一个方便的教程,可以格式化您可以与printf()函数系列一起使用的说明符.更重要的是,检查您正在使用的函数的返回类型.
我还建议你花一些时间阅读这本书,一定要在时间允许的情况下完成练习.它是C语言中最好的自学课程,练习很有趣.当你掌握了C语言后,再次练习练习......然后比较你的答案,开眼界:)