例如,

#include <stdio.h>

int main (int argc, const char * argv[]) {
    char out = printf("teststring");
    printf("%d\n", out);

    return 0;
}

将返回teststring10。有人知道怎么摆脱这10个吗?
提前谢谢。

最佳答案

让我们看看您的代码:

#include <stdio.h>

int main (int argc, const char * argv[]) {
    char out = printf("teststring");
    printf("%d\n", out);

    return 0;
}

然后改变它:
#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;
}

编译/运行编辑后的版本,您应该立即看到差异。修改str的长度,然后编译并再次运行它。
现在,只需对原始代码稍作更改:
#include <stdio.h>

int main (int argc, const char * argv[]) {
    char out = printf("teststring\n");
    printf("%d\n", out);

    return 0;
}

现在您可以看到,您正在打印两个不同的内容,并且自从添加了换行符之后,out变成了11。这里没有任何东西。然后将%d更改为%c(示例中out的正确格式说明符),并注意差异。ASCII(11)是一个垂直选项卡(请参见here)。YTMV(您的终端可能有所不同)。在这里,您打印的是一个字符,而不是整数的字符表示形式。
printf()返回的实际类型是一个整数。这样做的原因是为了让您确切地知道实际打印的字节数。这对于函数族来说是典型的,但是对于int这样的函数来说更有用,这样您就可以知道它是否无法将任何给定格式的整个长度打印到缓冲区中。注意,返回类型是有符号的,它可以是负的,因此选择存储其值的存储类型非常重要,特别是当您使用该值时,假设该值大于或等于零。
这里有一个handy tutorial用于格式化可以与printf()函数系列一起使用的说明符。更重要的是,检查正在使用的函数的返回类型。
我还建议,一定要在时间允许的情况下完成练习。这是C语言中最好的自学课程,练习很有趣。当你对C有了扎实的掌握后,再练习一遍。。然后比较你的答案,让人大开眼界:)

关于c - 摆脱C中的尾随数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2934783/

10-11 18:45