标签: printf

sprintf_s,缓冲区太小

以下代码导致错误并导致我的应用程序死亡.这是有道理的,因为缓冲区只有10个字节长,文本长度为22个字节(缓冲区溢出).

char buffer[10];    
int length = sprintf_s( buffer, 10, "1234567890.1234567890." ); 
Run Code Online (Sandbox Code Playgroud)

我如何捕获此错误,以便我可以报告它而不是崩溃我的应用程序?

编辑:

阅读下面的评论后,我选择_snprintf_s.如果它返回-1值,则缓冲区未更新.

length = _snprintf_s( buffer, 10, 9, "123456789" );
printf( "1) Length=%d\n", length ); // Length == 9

length = _snprintf_s( buffer, 10, 9, "1234567890.1234567890." );
printf( "2) Length=%d\n", length ); // Length == -1

length = _snprintf_s( buffer, 10, 10, "1234567890.1234567890." );
printf( "3) Length=%d\n", length ); // Crash, it needs room for the NULL char 
Run Code Online (Sandbox Code Playgroud)

c error-handling printf tr24731

10
推荐指数
3
解决办法
3万
查看次数

C printf使用%d和%f

我正在研究这个程序,我注意到使用%f表示double,%d表示float,这给了我一些完全不同的东西.谁知道为什么会这样?

int main ()
{
 float a = 1F;
 double b = 1;

 printf("float =%d\ndouble= %f", a, b);
}
Run Code Online (Sandbox Code Playgroud)

这是输出

float = -1610612736
double = 190359837192766135921612671364749893774625551025007120912096639276776057269784974988808792093423962875123204096.0000
Run Code Online (Sandbox Code Playgroud)

c printing floating-point double printf

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

如何将unsigned int格式化为8位十六进制数?

我想将unsigned int格式化为带有前导零的8位长字符串.

这是我到目前为止:

  unsigned int number = 260291273;
  char output[9];
  sprintf(output, "%x", number);
  printf("%s\n", output); // or write it into a file with fputs
Run Code Online (Sandbox Code Playgroud)

打印"f83bac9",但我想要"0f83bac9".我怎样才能实现格式化?

c formatting printf

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

PHP:你可以使用数组作为sprintf函数的参数部分吗?如果是这样 - 怎么样?

从PHP API参考:

string sprintf (string $ format [,mixed $ args [,mixed $ ...]])

返回根据格式化字符串格式生成的字符串.

可以$args是一个数组 - 如果是这样我将如何使用它?

php arrays printf

10
推荐指数
1
解决办法
2722
查看次数

iPhone调试真实设备

在XCode Organizer中,控制台 - 我可以读取NSLog输出,但不是printf().这是否可以printf()在真实设备上读取结果,就像在模拟器中一样?

iphone debugging printf objective-c

10
推荐指数
2
解决办法
8497
查看次数

如何在ANSI C中打印重音字符(如áéíóú)

我试着printf用一些重音字符,例如á é í ó ú:

printf("my name is Seán\n");

DEVC++ IDE中的文本编辑器显示它们很好 - 即源代码看起来很好.我想我需要一些其他库stdio.h,也许还有一些正常的变体printf.

我正在使用在Windows XP上运行的IDE Bloodshed DEVC.

c printf ansi non-ascii-characters

10
推荐指数
2
解决办法
9252
查看次数

在PHP中使用sprintf时添加\n换行符号

我正在尝试将现有数据从MySQL数据库导出到我可以运行的ruby命令中rake db:seed.

这是我的代码.

# Generate db:seed data for proveedores.
$proveedores = R::findAll('tbproveedores');
$proveedoresE = R::exportAll($proveedores);

foreach ($proveedoresE as &$p) {

    $line = 'BookSupplier.create(company: "%s", city: "%s", country: "%s", address: "%s", telephone: "%s", contact: "%s", email: "%s", website: "%s"\n';
    $exportedLine = sprintf($line, $p['empresa'], $p['ciudad'], $p['pais'], $p['direccion'], $p['telefono'], $p['personacontacto'], $p['email'], $p['website']);
    var_dump($exportedLine);
    fwrite($seeds, $exportedLine);
    echo "<br />";
}
Run Code Online (Sandbox Code Playgroud)

注意\n$ line变量末尾的换行符号.我在网上看到这就是使用新行所需要的全部内容.

我上面代码的输出是(vertabim,一条长行):

BookSupplier.create(company: "Pearson", city: "Lima", country: "Peru", address: "Av. Limon", telephone: "4673535421", contact: "Javier", email: "", …
Run Code Online (Sandbox Code Playgroud)

php printf newline

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

当字符串的长度大于n时,如何打印字符串前n个字节?

所以我有一个字符串,它有一定的字节数(或长度).我说字节是因为字符串末尾没有NULL终止符.虽然,我知道字符串有多长.通常,正如我们所知,当你printf("%s", str);,它将继续打印每个字节,直到它变为NULL字符.我知道没有C字符串不是NULL终止,但我有一个奇怪的情况,我存储的东西(不是特定的字符串),我不存储NULL,但"事物"的长度.

这是一个小样本:

char* str = "Hello_World"; //Let's use our imagination and pretend this doesn't have a NULL terminator after the 'd' in World
long len = 5;

//Print the first 'len' bytes (or char's) of 'str'
Run Code Online (Sandbox Code Playgroud)

我知道你可以这样做:

printf("%.5s", str);
Run Code Online (Sandbox Code Playgroud)

但是在这种情况下,我很难对5进行编码,尽管在我的情况下,5是在变量中.我会做这样的事情:

printf("%.(%l)s", len, str);
Run Code Online (Sandbox Code Playgroud)

但我知道你做不到.但是让你知道我想要完成的事情.

c string printf byte

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

关于如何理解printf("%d \n",({int n; scanf("%d",&n); n*n;})); 在C中工作

我通过quora答案看到了这个程序

 #include<stdio.h>
 int main() {
    printf("%d\n", ( { int n; scanf("%d", &n); n*n; } ));
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

我想知道这是如何工作的,如果这符合标准?

c printf block

10
推荐指数
1
解决办法
1555
查看次数

打印char时会发生哪些整体促销活动?

我最近读过这篇文章

unsigned char x=1;
printf("%u",x);
Run Code Online (Sandbox Code Playgroud)

由于格式说明符%u,因此调用未定义的行为,printf需要unsigned int.但我还是想了解这个例子中发生了什么.

我认为整数推广规则适用于表达式printf("%u",x) 和由...表示的值x.

A.6.1整体推广

无论是否有符号,都可以使用字符,短整数或整数位字段,或者枚举类型的对象,可以在任何可以使用整数的表达式中使用.如果int可以表示原始类型的所有值,则该值将转换为int; 否则该值将转换为unsigned int.这个过程称为整体推广.

"可以使用"是什么意思?这是否意味着"在句法上是正确的"还是"定义的行为"?

在这个例子中如何推广x?我已经读过它被提升为一个int,但是如果printf("%u", (int x))仍然是未定义的行为那么我真的不明白为什么......

c printf variadic-functions undefined-behavior integer-promotion

10
推荐指数
1
解决办法
271
查看次数