标签: printf

snprintf或vsnprintf更好,我怎样才能确保我安全地使用它们?

我决定在一些旧代码上运行一个静态分析工具,我找到了一些我正在使用sprintf的地方.该工具建议使用vsnprintf或snprintf替换调用,因为sprintf不会对缓冲区溢出执行任何类型的边界检查.

我可以轻松地在调用上进行查找和替换,以便它使用snprintf或vsnprintf,但我想确保没有其他任何事情需要完成才能使功能安全

在某些情况下,使用的字符串源自用户输入,在某些情况下,它们不会.

有人对如何做到这一点有任何建议吗?

c printf buffer-overflow

3
推荐指数
1
解决办法
3725
查看次数

将空指针赋予snprintf时的预期行为

此代码段的预期行为是什么?

char * aNullPointer = 0;
snprintf (res, 128, "Testing %s null pointer",aNullPointer);
Run Code Online (Sandbox Code Playgroud)

请注意,我故意试图让它取消引用我的空指针aNullPointer.

行为1)res指向字符串"Testing(null)null指针"

行为2)Seg Fault

根据我的平台,我似乎得到了不同的行为.某些snprintf实现执行完整性检查,而其他实现则不执行.

什么是最常见的行为?

c c++ printf pointers

3
推荐指数
1
解决办法
1419
查看次数

为什么C中的printf()方法设计为接受任意数量的参数?

我总是问自己这个问题,为什么在C中的printf()被设计为接受任意数量的参数,是不是表示重载?如果是,纯结构化语言如何包含面向对象的语言概念,如方法重载?

c oop printf overloading

3
推荐指数
1
解决办法
138
查看次数

为什么printf("%d \n",printf("%d\b",a))以这种方式工作?

这是我的C代码,用gcc编译.

#include<stdio.h>

int main() 
{ 
    int a=1; 
    switch(a)
    {
       int x=10;
       case 1:
           printf("%d\n",printf("%d\b",x));
           break;
       default:
           printf("%d\n",printf("%d\b",x));
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

printf()应该返回它成功打印的元素数. printf("%d\b", x)应该自己打印10(因为\ b将打印指针后退一步(10中的数字0)并且之后没有任何内容可以打印.所以它应该只打印10.这是2个字符.现在外部printf会显示2.输出应该是102.我实际看到的输出是2.

如果嵌套printfs是记住打印指针的位置?我的意思是,如果\b内部有一个printf,它将使打印指针落后一步.当控制现在进入外部时printf,记住改变的位置了吗?它会覆盖最后一个角色吗?

c printf escaping

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

printf应该已经打印后更改其值

所以我在这里有这个代码,(现在)只需将base1号码转换为基数为10的数字

/**
 * This function is supposed to convert 'number' from base1 to a number in base2.
 * It isn't fully implemented yet, and I've only converted base1 to a base 10 number.
 */
void base1_base2(int base1, int base2, int number) {

    int num, place = 0;
    int rem = number;
    int i;
    for (i = 0; i < num_digits(number); i++) {

        int mod = rem % 10;
        rem = floor(rem / 10);

        int powerResult = pow(base1, place++);
        num = …
Run Code Online (Sandbox Code Playgroud)

c printf

3
推荐指数
1
解决办法
1254
查看次数

在PHP中,printf()不如echo可靠吗?

出于某种原因,我采用printf($var)了过度使用echo $var.我真的不知道为什么.

但是,似乎我有一个问题从变量输出一个字符串 - 如果我printf($var)改为echo $var- 90%的时间它修复了问题.

这种情况发生在我身上不止一次出现不同的错误,从过少的参数到只回显空/空字符串.

任何人都可以解释为什么printf()似乎工作效率低于echo?

php printf echo

3
推荐指数
1
解决办法
1774
查看次数

不使用printf时的Segfault

我正在使用POSIX线程,在我的程序结束时,我正在等待加入每个线程.经过一段时间的完美运行后,我的代码在等待线程时开始返回一个奇怪的错误.

pthreads threads[C+P];

for(i = 0; i < (C+P); i++)
{
    printf("%d\n", i);  
    pthread_join(threads[i]);
}
Run Code Online (Sandbox Code Playgroud)

如果我删除了printf语句,或者将其替换为任何其他printf语句,延迟或对i的任何其他操作,我仍然会遇到段错误.

我该如何开始调试呢?

c linux printf for-loop segmentation-fault

3
推荐指数
1
解决办法
1975
查看次数

无法在cuda内核函数中使用printf

似乎printf在cuda代码的内核中不起作用

#include "Common.h"
#include<cuda.h>
#include <stdio.h>

__device__ __global__ void Kernel(float *a_d , float *b_d ,int size)
{
    int idx = threadIdx.x ;
    int idy = threadIdx.y ;
    //Allocating memory in the share memory of the device
    __shared__ float temp[16][16];

    //Copying the data to the shared memory
    temp[idy][idx] = a_d[(idy * (size+1)) + idx] ;


    printf("idx=%d, idy=%d, size=%d\n", idx, idy, size);


    for(int i =1 ; i<size ;i++) {
            if((idy + i) < size) { // NO Thread divergence here …
Run Code Online (Sandbox Code Playgroud)

printf cuda

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

在printin输入int

我正在尝试修复我写的脚本:

import java.util.Scanner;
public class Line2
{
    public static void main (String [] args)

    {
        Scanner scan = new Scanner (System.in);
        System.out.println ("Please enter 4 integers");
        int x1 = scan.nextInt();
        int y1 = scan.nextInt();
        int x2 = scan.nextInt ();
        int y2 = scan.nextInt ();
        double distance;

        //Asking the user to insert coordinates of both points and setting double
        // on distance in order to properly calculate the square root

        distance = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
        System.out.print( "the length of the line …
Run Code Online (Sandbox Code Playgroud)

java string formatting printf println

3
推荐指数
1
解决办法
93
查看次数

printf(string)与printf("%s",string)

我正在写一个代理服务器,我遇到了一个奇怪的错误,我希望有人能够解释.

我收到了来自客户的GET请求的第一行.例如,客户端将发送请求:

GET http://en.wikipedia.org/wiki/Special:Random HTTP/1.0
Host: en.wikipedia.org
...
Run Code Online (Sandbox Code Playgroud)

我会将此请求转发给服务器.

但是,对于某些网址,我会遇到一个问题:

GET http://map.media6degrees.com/orbserv/curl=http%3A%2F%2Fwww.masteringemacs.org%2Farticles[trunc] HTTP/1.0
Run Code Online (Sandbox Code Playgroud)

我把这条线读进去了char buffer[MAXLINE_LENGTH],这条线足以容纳字符串.

当我打印收到的get请求时

printf(buffer);
Run Code Online (Sandbox Code Playgroud)

打印的字符串是:

GET http://map.media6degrees.com/orbserv/hbpix?pixId=2869&curl=http0X0.0000000000015P-10220.0000000.000000www.masteringemacs.org0.000000articles0.00000020100.000000110.000000010.000000running-shells-in-emacs-overview204741995430849962482228271154502456423284733956118041206315879167624419264810411254941012469231829496710329852458403099883653794777355548418601638730167027236864.000000 HTTP/1.0
Run Code Online (Sandbox Code Playgroud)

似乎%3A,%2F等已经过字符串格式化.

当我运行时printf("%s", buffer);,我得到正确和预期的输出

编辑:我理解为什么会这样; 我对为什么会这样发生感兴趣.printf的值是来自堆栈中某个任意区域的"字符串格式"吗?%3A等有效格式字符串吗?

c printf

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