#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
我知道如果函数需要将格式字符串传递到 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)
我怎样才能避免警告?
我之前发布过同样的问题,但由于我只是 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 语句的情况下进行打印吗?请解释 。任何帮助将非常感激。谢谢。
我是初学者 C 程序员,我读到这printf()是一个非常复杂的函数,速度非常慢并且消耗很多 CPU 周期。所以我想知道标准纯 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) 有人可以解释一下或给我指出一个参考资料,解释为什么在第一个打印的行下面的代码片段中包含整个单词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) 这是我的程序中的一段代码。我正在使用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)
这$是 …
我有一个奇怪的问题。我要求用户输入 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) 如何将原始字符串文字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不允许使用转义序列代替
我正在使用筛法将所有素数打印到文件中。我的代码如下:
#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的最后几行如下:
我期望素数计数是最后一行。请帮忙解决这个问题。提前致谢。