相关疑难解决方法(0)

使用malloc时,从`void*'无效转换为`char*'?

我在第5行的错误中遇到了以下代码的问题:

错误:无效转换void*char*

我正在使用g ++和codeblocks,我试图将此文件编译为cpp文件.有关系吗?

#include <openssl/crypto.h>
int main()
{
    char *foo = malloc(1);
    if (!foo) {
        printf("malloc()");
        exit(1);
    }
    OPENSSL_cleanse(foo, 1);
    printf("cleaned one byte\n");
    OPENSSL_cleanse(foo, 0);
    printf("cleaned zero bytes\n");
}
Run Code Online (Sandbox Code Playgroud)

c++ malloc g++

55
推荐指数
4
解决办法
8万
查看次数

确定sprintf缓冲区大小 - 标准是什么?

像这样转换int时:

char a[256];
sprintf(a, "%d", 132);
Run Code Online (Sandbox Code Playgroud)

什么是确定如何大的最好方式一个应该是什么?我假设手动设置它很好(因为我看到它在任何地方使用),但它应该有多大?在32位系统上可能的最大int值是多少,是否有一些棘手的方法来确定它?

c int printf

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

如何在Linux中打印C中毫秒和纳秒精度的时差?

我有这个程序打印2个不同实例之间的时差,但它打印精度为秒.我希望以毫秒为单位打印它,另一个以纳秒为单位进行打印.

//Prints in accuracy of seconds

#include <stdio.h>
#include <time.h>

int main(void)
{
    time_t now, later;
    double seconds;

    time(&now);
    sleep(2);

    time(&later);
    seconds = difftime(later, now);

    printf("%.f seconds difference", seconds);
}
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?

c linux time gcc

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

使用snprintf避免缓冲区溢出

我这样使用snprintf以避免缓冲区溢出:

char err_msg[32] = {0};
snprintf(err_msg, sizeof(err_msg) - 1, "[ ST_ENGINE_FAILED ]");
Run Code Online (Sandbox Code Playgroud)

-1如果字符串长度超过32个字节,我为null终止符添加了保留空间.

我的想法是否正确?

平台:

  • GCC 4.4.1
  • C99

c printf

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

sprintf/snprintf是否分配了额外的内存?

我正在编写一个库,并希望使它绝对与资源无关,这也意味着库应该使用用户提供的内存分配功能.库允许用户也设置自己的错误处理函数,这些函数以错误消息作为参数调用,如下所示:

typedef void (*error_handler)(const char* msg);
Run Code Online (Sandbox Code Playgroud)

库代码自己准备错误消息,就像那样(消息格式化失败的情况):

char buf[BUF_SIZE];
snprintf(buf, BUF_SIZE, "Oops found at file '%s' line %d", __FILE__, __LINE__);
Run Code Online (Sandbox Code Playgroud)

但是我可以确定snprintf不会为malloc的内部使用分配更多内存,显然会绕过用户提供的分配例程吗?我的Linux系统中的手册页对此保持沉默.

c memory-management stdio

9
推荐指数
2
解决办法
7042
查看次数

在C++中有没有更优雅的方式将sprintf和std :: string结合起来?

在我的C++代码中经常使用以下类型的辅助函数:

static inline std::string stringf(const char *fmt, ...)
{
    std::string ret;
    // Deal with varargs
    va_list args;
    va_start(args, fmt);
    // Resize our string based on the arguments
    ret.resize(vsnprintf(0, 0, fmt, args));
    // End the varargs and restart because vsnprintf mucked up our args
    va_end(args);
    va_start(args, fmt);
    // Fill the string
    if(!ret.empty())
    {
        vsnprintf(&ret.front(), ret.size() + 1, fmt, args);
    }
    // End of variadic section
    va_end(args);
    // Return the string
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

它有一些上升空间:

  1. 字符串长度没有任意限制
  2. 字符串是就地生成的,不会被复制(如果RVO正常工作)
  3. 外面没有惊喜

现在,我有一些问题:

  1. 重新扫描varargs有点难看
  2. 事实上,std :: …

c++ string printf string-formatting c++11

4
推荐指数
2
解决办法
1508
查看次数

将空指针赋予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 中查找格式化字符串的长度

我的应用程序中有以下功能:

 void func(char *file, int line)
 {
    char stmt[150];
    sprintf(stmt, "Failed in file %s, at line number %d", file, line);
 }
Run Code Online (Sandbox Code Playgroud)

在这里,我采用 150 字节的字符数组(粗略猜测),而不是我需要找到我在 sprintf() 中给出的字符串的长度并采用该大小的数组。

请建议我是否在 C 中使用这种工具来查找格式化字符串的长度。谢谢 !

c strlen

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

使用malloc或堆栈的C sprintf函数

我听说有一个版本sprintf(),可能是一个GNU/gcc扩展,它可以分配自己的缓冲区,我必须free()或者可能使用堆栈就像alloca().

这两种方法都适合我.谁能告诉我我在想什么功能?

c printf gcc alloca

0
推荐指数
1
解决办法
1069
查看次数

标签 统计

c ×7

printf ×5

c++ ×3

gcc ×2

alloca ×1

c++11 ×1

g++ ×1

int ×1

linux ×1

malloc ×1

memory-management ×1

pointers ×1

stdio ×1

string ×1

string-formatting ×1

strlen ×1

time ×1