gpt4 book ai didi

c++ - scanf格式字符串中的 '|'是什么意思

转载 作者:搜寻专家 更新时间:2023-10-31 00:08:20 25 4
gpt4 key购买 nike

char szA[256]={0}; 
scanf("%[^a]%s",&szA); //failed when trailing string
scanf("%[^a]|%s",&szA); //worked whatever the input

“|”是什么意思在格式字符串中表示。我找不到官方规范。有没有人可以给我一些线索?

当我输入带有多个 '|' 的内容时,后一个仍然有效(只是意味着程序没有崩溃)。它不需要在格式字符串之后给出两个缓冲区吗?当输入字符串可以分为多个字符串时,前者崩溃。所以它们之间还有其他区别。它是什么 ?

所以,我不明白为什么当缓冲区号小于指令号时后一个工作,而前一个失败。或者谁能​​给我一个输入字符串,让后者崩溃。

最佳答案

What does '|' mean in a format string. I cannot find official specification. Is there anyone who can give me some clue?

这意味着代码需要输入流中的文字 |

话虽如此,该格式说明符将不起作用。

%[^a] 部分将捕获所有不是 a 的字符。这意味着它甚至会从输入流中捕获 |。当在流中遇到字符 a 时,它将停止捕获。当然,这与格式字符串中的文字 | 不匹配。因此,之后的任何事情都不会被处理。

如果我向以下程序提供输入 def|akdk

#include <stdio.h>

int main()
{
char szA[256] = {0};
char temp[100] = {0};
int n = scanf("%[^a]|%s", szA, temp);
printf("%d\n%s\n%s\n", n, szA, temp);
}

我得到以下输出

1
def|

这很有道理。顺便说一句,输出中的最后一行是空行。我不确定如何在答案中显示这一点。

当我将 scanf 行更改为

   int n = scanf("%[^a]a%s", szA, temp);

我得到以下输出

2
def|
kdk

这很有道理。

关于c++ - scanf格式字符串中的 '|'是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49376434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com