标签: printf

printf 中如何处理 '\0'?

#include<stdio.h>
#include<conio.h>

int main()
{
    char arr[]="\0";
    if(printf("%s",arr))
        printf("not empty");
    else
        printf("empty");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里我认为\0将被视为数组中的 1 个字节并printf返回 1 个字节,因此不应打印空。但输出就是返回的empty意思。那么如何服用呢?printf0printf\0

c printf

0
推荐指数
1
解决办法
2万
查看次数

如何在字段中存储格式字符串并避免格式非文字警告?

我知道如果函数需要将格式字符串传递到 vsnprintf 中,您可以避免出现__attribute__((__format__ (__printf__, 2, 0)))“格式字符串不是字符串文字”的 clang 警告。但是在我的例子中,格式字符串被保存为一个用文字初始化的字段。像这样的东西:

class Worker {
    const char* format;
    Worker(const char* f): format(f) {...}

    void go() {
        ...
        vsnprintf(..,..,format,..);
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能避免警告?

c++ printf clang

0
推荐指数
1
解决办法
1588
查看次数

如何在 Unix 中使用 awk 从文本文件打印奇数字段?

我之前发布过同样的问题,但由于我只是 Unix 的初学者,我无法理解给出的答案,尽管这肯定有助于满足我的要求。

awk -F\| '{s="";for (i=1;i<=NF;i+=2) {s=s?s FS $i:$i} print s}' file
Run Code Online (Sandbox Code Playgroud)

这个 {s=s?s FS $i:$i} print s} 是做什么的?它如何打印所需的输出?我无法理解。这是 Unix 中的一种特殊运算符,可以在不使用 print 或 printf 语句的情况下进行打印吗?请解释 。任何帮助将非常感激。谢谢。

unix awk printf

0
推荐指数
1
解决办法
3140
查看次数

比 printf 更快的函数

我是初学者 C 程序员,我读到这printf()是一个非常复杂的函数,速度非常慢并且消耗很多 CPU 周期。所以我想知道标准纯 c 库中是否存在任何函数,并且比该函数更快printf()或不更快,以及何时使用该函数以及何时不使用它。我的目标是编写可以在任何计算机和/或嵌入式系统上运行的高效代码

c printf

0
推荐指数
1
解决办法
6494
查看次数

C中printf()中单引号和双引号的区别

我对 C 的 printf() 中双引号和单引号的使用有疑问。我有以下代码:

#include<stdio.h>
int main(int argc, char** argv) {
    char buffer[100];
    strncpy(buffer, argv[1], 100);
    printf(buffer);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以当我编译并运行它时,会发生以下结果:

./a.out 'AAAA%8$p'

AAAA0x70243825**41414141**

./o "AAAA%8$p"

AAAA
Run Code Online (Sandbox Code Playgroud)

请注意,在第一种情况下,我输入了单引号,在后一种情况下,我输入了双引号。

这里发生了什么。

Q2。我正在关注此链接。所以我的问题是,运行时输入 argv[1] 中的 AAAA 如何能够影响 printf() 的输出。起初我以为这只是巧合,但我输入并得到以下内容

./o 'BBBB%8$p'

BBBB0x70243825**42424242**
Run Code Online (Sandbox Code Playgroud)

编辑:所以我认为看到答案存在一些误解。我知道直接“printf(buffer)”的滥用。因此,我将引用我之前提到的相关链接:

由于 printf 的参数数量可变,因此它必须使用格式字符串来确定参数数量。在上面的例子中,攻击者可以传递字符串“%p %p %p %p %p %p %p %p %p %p %p %p %p %p %p”并欺骗 printf 认为它是这样的有 15 个参数。它会天真地打印堆栈上接下来的 15 个地址,认为它们是它的参数:

$ ./a.out "%p %p %p %p %p %p %p %p %p %p %p %p …
Run Code Online (Sandbox Code Playgroud)

c printf string-formatting

0
推荐指数
1
解决办法
1991
查看次数

将模板字符串中的 \b 处理为 C 中的 printf

有人可以解释一下或给我指出一个参考资料,解释为什么在第一个打印的行下面的代码片段中包含整个单词hello,而在第二个中打印的行仅包含字母he?我认为退格转义字符会删除最后三个字母,无论换行转义如何。我已经阅读了 GNU 文档printf,但找不到任何要点。

int main(void)
{
    printf("hello\b\b\b\n");        
    return 0;
}



int main(void)
{
    printf("hello\b\b\b");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c terminal printf escaping

0
推荐指数
1
解决办法
4319
查看次数

C++ 11 int8_t 有问题的输入/输出

这是我的程序中的一段代码。我正在使用int8_t数据类型,并且在输入/输出方面遇到一些问题。显然,int8_t在程序中使用需要-std=c++11为编译器设置标志g++。我这样做了,但出现运行时错误。这是我的代码:

#include <iostream>
#include <cstdint>
using std::cout;
using std::cin;
using std::endl;
int main() {
  int8_t number;

  cout << "Enter a number [1-100]: ";
  cin >> number;
  cout << "You entered: " << number << endl;
  cout << number << " / 10 = " << (number / 10) << endl;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是程序的输出:

 $ ./a.out
Enter a number [1-100]: 95
You entered: 9
9 / 10 = 5
Run Code Online (Sandbox Code Playgroud)

$是 …

printf iostream input cstdint c++11

0
推荐指数
1
解决办法
1892
查看次数

scanf后输入数字重置为0

我有一个奇怪的问题。我要求用户输入 1 到 15 之间的数字。然后我会要求用户使用递归或 for 循环来获取该数字的阶乘值。当他们回答该问题时,输入的值将变为 0。如果我出于测试目的删除该问题,则该值将保留用户输入的值。

#include <stdio.h>
    int recursive(int);
    int nonRecursive(int);
    
    int main() 
    {
      /* Variables */
      int numberSelected, returnedValue;
      char answer;
      
      do
      {
        /* Request a number between 1 and 15 */
        printf("Please enter a number between 1 and 15: ");
        scanf("%d", &numberSelected);
        printf("%d\n", numberSelected); /* This prints out the user's number */
      }while(numberSelected < 1 || numberSelected > 15); /* Loops if the value is not between 1 and 15 */
      
      /* Ask user if …
Run Code Online (Sandbox Code Playgroud)

c printf scanf

0
推荐指数
1
解决办法
351
查看次数

printf - 具有固定宽度整数类型格式宏的原始字符串文字

如何将原始字符串文字R与固定宽度整数类型的格式宏一起使用?

例如

std::int64_t num = INT64_MAX;
std::printf(R"("name":"%s", "number":"%")" PRId64, "david", num); // wrong syntax
Run Code Online (Sandbox Code Playgroud)

输出应该是

"name":"david", "number":"9223372036854775807"
Run Code Online (Sandbox Code Playgroud)

R不允许使用转义序列代替

c++ printf string-literals

0
推荐指数
1
解决办法
848
查看次数

为什么 fprintf 即使在刷新后也没有打印文件中的完整数据?

我正在使用筛法将所有素数打印到文件中。我的代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(){
    FILE* file = fopen("primeList.txt","w+");
    bool* x;
//  long upLimit=100;
    long upLimit=2000000000;    
    x=(bool*) calloc(1,upLimit);
    long i=upLimit;
    while(i--){
        *(x+i)=true;
    }
    *(x+1)=false;
    *(x+2)=true;
    *(x+3)=true;
    int cnum=2;
    int count=0;
    while(cnum<upLimit){
        if(*(x+cnum)){
            fprintf(file, "%d\n",cnum);
            count++;
            int compNum=cnum*2;
            while(compNum<upLimit){
                *(x+compNum)=false;
                compNum+=cnum;
            }
        }
        cnum+=1;
    }
    fprintf(file, "Count is : %d\n", count);
    fflush(file);
    fclose(file);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

outfile的最后几行如下:

在此输入图像描述

我期望素数计数是最后一行。请帮忙解决这个问题。提前致谢。

c printf

0
推荐指数
1
解决办法
81
查看次数