标签: format-string

c float precision命令的C++等价物是什么?

在C中我们有一个声明如下:

printf("%6.3f ",floatNumber);
Run Code Online (Sandbox Code Playgroud)

这限制了打印时的位数.
我怎样才能实现类似的行为C++?我知道,setprecision但这并没有帮助我做同样的事情.

c c++ format-string

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

`std::format` 是否容易受到格式字符串攻击?如何缓解?

我想使用printffprintf等将 C 风格代码重构为 C++。是否std::format容易受到格式字符串攻击,如前面提到的 C 函数?

如果我搜索格式字符串攻击,我发现的只是stdio 格式字符串漏洞。我想更多地了解是否std::format容易受到攻击,以及如何缓解它,即使我必须格式化用户提供的字符串。

c++ printf format-string c++20 fmt

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

我正在尝试格式化我的标签文本

我希望我Label使用这种{0:c2}格式; 但是,当我按照以下方式执行时似乎不起作用:

客户代码:

<asp:Label ID="Label4" runat="server" Text="Label" StringFormat="{}{0:c2}"></asp:Label>
Run Code Online (Sandbox Code Playgroud)

服务器代码(在页面加载时):

Dim dvSql7 As DataView = DirectCast(SqlDataSource7.Select(DataSourceSelectArguments.Empty), DataView)
    For Each drvSql7 As DataRowView In dvSql7
        Label4.Text = drvSql7("goal").ToString()

    Next
Run Code Online (Sandbox Code Playgroud)

可能是什么问题?在此先感谢您的帮助.

vb.net asp.net label format-string

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

C scanf格式字符串警告

我正在研究Euler#3(http://projecteuler.net/problem=3).我认为我的逻辑是正确的,但是在尝试使用scanf(和printf)时遇到错误.我目前正在尝试使用%li,这是我得到的错误:

euler3.c: In function ‘main’:
euler3.c:30: warning: format ‘%li’ expects type ‘long int **’, but argument 2 has type ‘long int’
euler3.c:30: warning: format ‘%li’ expects type ‘long int *’, but argument 2 has type ‘long int’
Run Code Online (Sandbox Code Playgroud)

我理解错误,但对于我的生活,我找不到解决方案.如果需要,这是我的代码.

#include <stdio.h>

long greatestPrime(long num)
{
        int i;

        for(i = 2; i <= num; i++)
        {
                if(num%i == 0)
                {
                        num = num/i;
                        i--;
                }
        }

        return num;
}

int main(int argc, char *argv[])
{
        unsigned long greatest;

        printf("Enter number …
Run Code Online (Sandbox Code Playgroud)

c scanf format-string

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

为printf调用添加长度说明符更安全吗?

我的问题是从安全角度来看.我正在清理一些代码,我发现当前的代码有一个不受控制的格式字符串漏洞; 它传递一个字符串,printf()如:

void print_it(char * str)
{
    printf(str);
Run Code Online (Sandbox Code Playgroud)

这显然被认为是不安全的编程,即使gcc通常会至少给你一些警告:

警告:格式不是字符串文字,也不是格式参数

现在要"修复"这个问题,我们可以确保你得到的东西被视为一个字符串

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

但是我想知道在使用长度特定器时是否有任何额外的安全性.就像是:

printf("%.*s", (int)sizeof(str), str);
Run Code Online (Sandbox Code Playgroud)

我想不出有什么理由会更加安全,但如果我遗漏了一些明显的东西,我也不会感到惊讶.

c security printf format-string

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

为什么格式字符串中%p和%x的格式不同?

打印十六进制值(%x)和地址(%p)时,格式略有不同.0x在十六进制值的情况下,打印值不会以:

int main()
{
     int x = 0x1234;
     printf("Value of x: %x\n", x);
     printf("Address of x: %p\n", (void*)&x);
}
Run Code Online (Sandbox Code Playgroud)

收益率(gcc):

Value of x: 1234
Address of x: 0xffb0fbfc
Run Code Online (Sandbox Code Playgroud)

为什么0x在地址的情况下强迫你呢?

我想它归结为标准.

0x如果没有我想要的话,打印地址的正确方法是什么?这%p不仅是%x一个附加的0x权利吗?

c printf format-string

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

printf() 在 C 中分配内存吗?

这个简单的方法只是创建一个动态大小为 n 的数组,并用值 0 ... n-1 对其进行初始化。它包含一个错误,malloc() 仅分配 n 而不是 sizeof(int) * n 字节:

int *make_array(size_t n) {
    int *result = malloc(n);

    for (int i = 0; i < n; ++i) {
        //printf("%d", i);
        result[i] = i;
    }

    return result;
}

int main() {
    int *result = make_array(8);

    for (int i = 0; i < 8; ++i) {
        printf("%d ", result[i]);
    }

    free(result);
}
Run Code Online (Sandbox Code Playgroud)

当您检查输出时,您会发现它会按预期打印一些数字,但最后的数字是乱码。然而,一旦我在循环中插入 printf() ,输出就出奇地正确,尽管分配仍然是错误的!是否有某种与 printf() 相关的内存分配?

c malloc printf heap-memory format-string

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

Python3字符串格式赋值导致在赋值之前引用

据我所知,在赋值之前有一些关于引用的帖子有增量.

但是,我看到格式字符串的类似问题.

greeting = "hello, {}"

def printHello(name):
   greet = greeting.format(name)
   print(greet)

printHello("Erica")
Run Code Online (Sandbox Code Playgroud)

我有local variable 'greet' referenced before assignment.

任何人都可以解释为什么会这样吗?

此外,此错误偶尔会发生,因此它不具有确定性......

我认为global greeting会解决这个问题吗?

==编辑==

我发现错误来自一个库而不是我的代码抱歉混淆

python format-string

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

printf 以多个指针作为 C 中的参数

printf()当我们在没有格式说明符的情况下向它提供多个参数时,它的行为是什么?

例子:

int main() 
{
    printf("hello", "hi");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器在编译上述程序时会产生警告?:

warning: too many arguments for format [-Wformat-extra-args]
Run Code Online (Sandbox Code Playgroud)

如果我们编译如下类似的程序:

int main() 
{
    char *s1 = "hello";
    char *s2 = "hi";
    printf(s1, s2);
}
Run Code Online (Sandbox Code Playgroud)

不产生警告。这是什么原因?

另外,为什么两个程序hello都只输出而不打印hi

c printf variadic-functions language-lawyer format-string

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

如何将格式字符串发送到iostream?

可能重复:
std :: string格式化,如sprintf

我可以使用带有printf等格式字符串的c ++ iostream类吗?

基本上,我希望能够做到这样的事情: -

snprintf (inchars, len, "%4f %6.2f %3d \n", float1, float2, int1);
Run Code Online (Sandbox Code Playgroud)

很容易使用stringstreams.是否有捷径可寻?

c++ iostream format-string

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