标签: printf

sprintf 何时以及为什么会失败?

我正在使用 swprintf 将字符串构建到缓冲区中(使用循环等)。

const int MaxStringLengthPerCharacter = 10 + 1;
wchar_t* pTmp = pBuffer;
for ( size_t i = 0; i < nNumPlayers ; ++i)
{
    const int nPlayerId = GetPlayer(i);
    const int nWritten = swprintf(pTmp, MaxStringLengthPerCharacter, TEXT("%d,"), nPlayerId);
    assert(nWritten >= 0 );
    pTmp += nWritten;
}

*pTaskPlayers = '\0';
Run Code Online (Sandbox Code Playgroud)

如果在测试期间断言从未命中,我可以确定它永远不会在实时代码中命中吗?也就是说,我是否需要检查 nWritten < 0 并处理它,还是我可以安全地假设不会有问题?

什么情况下可以返回-1?文档或多或少只是说明“如果功能失败”。在一个地方,我读到如果它不能匹配参数(即格式化字符串与可变参数),它将失败,但这并不让我担心。

在这种情况下,我也不担心缓冲区溢出 - 我知道缓冲区足够大。

c c++ printf widestring

6
推荐指数
1
解决办法
4876
查看次数

将组合字符串和数字输入的单元格数组写入文本文件

考虑以下:

DateTime = {'2007-01-01 00:00';'2007-02-01 00:00';'2007-03-01 00:00'};
Headers = {'Datetime','Data'};
Dat = [100,200,300];

Data = [DateTime,num2cell(Dat')];
Final = [Headers;Data];
Run Code Online (Sandbox Code Playgroud)

如何将"Final"中的数据写入制表符分隔的文本文件中.我知道如何在变量仅由数字输入组成时使用fopen,fprintf等,但我正努力解决这个问题.我试过了:

fid = fopen('C:\Documents\test.txt','wt');
fprintf(fid,'%s\t%s\n',Final{:});
fclose(fid);
Run Code Online (Sandbox Code Playgroud)

但是,这不会生成与matlab中生成的文本格式相同的文本文件.怎样才能解决这个问题?

matlab printf

6
推荐指数
1
解决办法
8230
查看次数

转换说明符%ju

在下面的页面中,我发现了代码

CERT INT15-C对程序员定义的整数类型使用intmax_t或uintmax_t作为格式化IO

uintmax_t temp;

if(scanf("%ju", &temp) != 1) {
   ...
Run Code Online (Sandbox Code Playgroud)

我不熟悉"%ju"说明符.我没有成功找到互联网上"%ju"的解释.

这是由某些特定的编译环境定义的,还是一般使用的?

c printf scanf

6
推荐指数
1
解决办法
1927
查看次数

Golang:如何打印结构中的字节的 % x ?

var b [88]byte
n, err := file.Read(b[:])
fmt.Printf("bytes read: %d Bytes: [% x]\n", n, b)
Run Code Online (Sandbox Code Playgroud)

上面以十六进制打印字节

我有一个这样的结构

type SomeStruct struct {
   field1 []byte
   field2 []byte
}
someStructInstance := SomeStruct{[249 190 180 217], [29 1 0 0]}
fmt.Println(someStructInstance)
=> {[249 190 180 217] [29 1 0 0]}
Run Code Online (Sandbox Code Playgroud)

但理想情况下我希望它打印十六进制

=> {[f9 be b4 d9] [1d 01 00 00]}
Run Code Online (Sandbox Code Playgroud)

我该怎么办呢?

printf byte go

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

将命令的输出附加到文件而不换行

我在unix脚本中有以下行:

head -1 $line | cut -c22-29  >> $file
Run Code Online (Sandbox Code Playgroud)

我想在没有换行符的情况下附加此输出,而是用逗号分隔.有没有办法将此命令的输出提供给printf?我试过了:

head -1 $line | cut -c22-29 | printf "%s, " >> $file
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

printf "%s, " head -1 $line | cut -c22-29 >> $file
Run Code Online (Sandbox Code Playgroud)

这些都没有奏效.有人有主意吗?

unix printf append output

6
推荐指数
1
解决办法
6156
查看次数

在bytearray上打印

我有以下结构:

/** The description of an ordinary 8+3 DOS directory entry. */
struct  dirent
{
    byte    d_name[8];  //!< space padded name
    byte    d_ext[3];   //!< space padded extension

    byte    d_attr;     //!< the file attributes

    ......
};

printf("%s\n", de.d_name);
Run Code Online (Sandbox Code Playgroud)

我面临的问题是打印d_name我得到以下输出: 'INSTALL BAT!' 这不是我最想要的8个字符.

我的猜测是printf函数继续在内存中搜索字符串终止符,即使它超出了d_name边界.

有没有办法只打印'INSTALL'或者我是否需要遍历整个字节数组并单独打印字符?

c printf

6
推荐指数
1
解决办法
4978
查看次数

更改 sprintf() 中的小数字符

我可以使用以下命令更改输出中的小数字符:

> 1/2
[1] 0.5
> options(OutDec = ',')
> 1/2
[1] 0,5
Run Code Online (Sandbox Code Playgroud)

但是,这种变化并不影响sprintf()功能。

> sprintf('%.1f', 1/2)
[1] "0.5"
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:有一种简单的方法可以改变它(小数字符)吗?我认为我不能使用“简单”RE,因为并非所有.需要都通过 进行交易,。

我不知道该怎么做,所以我不能说我已经做了什么。

printf r

6
推荐指数
1
解决办法
1649
查看次数

如何使用 open() 和 printf() 写入文件?

我正在使用 open() 打开一个文件,并且需要使用 printf 打印到该文件,而不输出到控制台。我该怎么做呢?我可以成功创建文件,并 printf 到控制台,但这是不正确的。

int main(int argc, char *argv[]) {
    int fd;
    char *name = "helloworld";
    fd = open(name, O_CREAT);

    char *hi = "Hello World";
    printf("%s\n", hi);

    close(fd);
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

我需要程序没有输出到控制台,但是如果我查看该文件helloworld,它应该在里面写有“Hello World”。例如:

prompt> ./hello
prompt> more helloworld
   Hello World
Run Code Online (Sandbox Code Playgroud)

c file-io printf output

6
推荐指数
1
解决办法
5万
查看次数

如何在 csh 脚本中分配变量并将它们用作同一脚本的参数?

再会,

希望这里得到任何人的帮助,提前致谢。我有 T.csh ,如下所示:

#! /bin/csh

set a="01 02 03 04 05 06 07 08 09 10 11 12 13"
set b="14 15 16 17 18 19 20 21 22 23 24 25"
set c="01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25"

set X = `grep $1 EOL.txt | head -n1 | cut -d- -f1`
printf "$X\n$2\n$3\nYYYY\n1\nN\n"
Run Code Online (Sandbox Code Playgroud)

变量 a、b 和 c 可以选择用作 printf …

unix printf csh set echo

6
推荐指数
1
解决办法
4万
查看次数

打印到终端会导致 OOM(内存不足)吗?

  1. 打印到终端如何影响内存使用?它会一直消耗内存直到 OOM 吗?
  2. 那么在 docker 容器中呢?
  3. 操作系统如何处理打印到终端的内存?
  4. 操作系统是否会在某个时刻刷新终端?

terminal printf

6
推荐指数
1
解决办法
918
查看次数

标签 统计

printf ×10

c ×4

output ×2

unix ×2

append ×1

byte ×1

c++ ×1

csh ×1

echo ×1

file-io ×1

go ×1

matlab ×1

r ×1

scanf ×1

set ×1

terminal ×1

widestring ×1