- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在C代码中
printf("%s", message);
我想知道我是否应该使用
fputs(message, stdout);
以前的代码更清晰但是速度更慢吗?或使用更多内存?我更喜欢更清晰的代码,但不喜欢它看起来愚蠢地浪费时间和内存。
我很想知道编译器会检测到这种情况,并且必要的格式解析和解释不会在运行时完成。毕竟,gcc
会提示 printf("")
,因此编译器可能会“理解”格式并对其进行预处理。
PS:前者的风格更清晰,在写format("name=%s\n",unameData.nodename);
时更明显,而不是fputs(stdout,"name=");fputs(stdout,unameData.nodename);putchar('\n');
。这毕竟是格式的目的。
最佳答案
根据实现情况,其中一种可能更有效。
通过适当的优化标志,体面的编译器应该能够在程序员不知情的情况下将效率较低的形式更改为另一种形式(假设 printf("%s\n", message)
)。
$ cat print.c
#include <stdio.h>
int main()
{
printf("%s\n", "Hello world");
return 0;
}
$ gcc -S -O2 print.c
$ cat print.s
.file "print.c"
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "Hello world"
...
movl $.LC0, (%esp)
call puts
xorl %eax, %eax
leave
...
...
表示为简洁省略的代码
关于c - fputs 是否比格式 ("%s"更有效,..)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27704547/
以下编程在“fputs”的第一个实例处崩溃,尝试将“fname”打印到文件 Member_inf。我还尝试打印常量字符串“abcdefg”,但仍然失败。到底做错了什么?看来是文件的初始化。如果可能的话
我的输入文件包含以下格式的产品集合: name price symbol 示例文件是: Ball 6.24 u 我想读取文件,将文本解析为struct,并使用相同的元素重写文件,但不包含带有符号u的元
总的来说,我对 C 语言和内存分配还很陌生。基本上我想做的是复制未知大小的输入文件的内容并使用递归反转其内容。我觉得我已经非常接近了,但是当我尝试放入我认为是文件反转内容的内容时,我不断遇到段错误(我
fseek(ofile, 13, SEEK_SET); fputs("\t", ofile); do { ch = getc(ofile); printf("%c", ch);
当运行下面的代码时,我没有得到任何输出,但我不知道为什么。 # include int main() { fputs("hello", stdout); while (1);
我试图在文件中写入数组的全部内容。这是我的代码: fichier = fopen(patch, "w+"); if (fichier != NULL) { if(methode=
#include int main() { FILE *fp; char str[60]; char data[50]; char * pch; /* opening
我在完成下面的作业时遇到了问题。每当我尝试将 fputs 参数合并到一行中时,错误都会显示 fputs 中的参数过多。 我想做的是在每个子文件中创建一个输出,其中包括时间以及一行中的文本,但下面的代码
我有以下代码: #include #include #include using namespace std; int main(){ size_t size; char *li
int main(int argc, char *argv[]) { FILE *datafile, *outputfile; char c, *line, *line1, *line
在这个程序中,我的 edit() 函数无法正常工作。当我尝试写一些东西时,它只会删除整个内容,而在 appendText() 中只有一个单词被附加?有没有办法将整个字符串写入文件? #include
我目前正在尝试用 C 语言创建一个数据库,使用 .txt 文档作为存储所有数据的地方。但是我无法让 fputs() 换行,所以我的程序在此 .txt 文档中写入的所有内容都只在一行上。 int
我有以下简单代码: #include int main(){ char buffer[20] = "abc"; FILE *pFile; pFile
我终于让自己去看了一些 Linux 代码。我现在正在查看 ls.c。 在底部的函数 usage() 中,我发现了很多这样的语句: fputs (_("\ List information about
不可能执行类似 fputs(4, fptOut); 的操作,因为 fputs 不喜欢整数。我该如何解决这个问题? 执行 fputs("4", fptOut); 不是一个选项,因为我正在使用计数器值。
或等效地, 为什么 puts() 会追加一个尾随换行符? 当输出字符串时,可能会用到两个类似的函数:fputs() 和puts()。 puts() 在输出时自动在末尾添加一个新行,但 fputs()
我在 Windows 上遇到文件写入失败的问题。我将它简化为这个例子: FILE* f = fopen("test.out", "r+b"); fseek(f, -1, SEEK_END); // o
为什么 fputs() 或 fprintf() 没有写入 %s 的 file.txt ?我尝试了这两个函数,但它们似乎没有写入文件。但是,当对 %d 使用相同的函数时,它目前确实有效。至于预期输出与当
为什么 fputs() 或 fprintf() 没有写入 %s 的 file.txt ?我尝试了这两个函数,但它们似乎没有写入文件。但是,当对 %d 使用相同的函数时,它目前确实有效。至于预期输出与当
假设test.txt是这样的: aaaaa aaaaa aaaaa 测试代码是这样的: #include #include #include int main() { FILE *f = f
我是一名优秀的程序员,十分优秀!