c - 定义可变大小的 CHAR 指针

标签 c pointers

如何定义具有正确宽度或可变宽度的字符指针?

我的场景如下..

void processRa(int _raCount, char *raFile)
{
    char *command; // How to correctly define this variable ?
    sprintf(command, "somecomm -r %s -N%d-%d ", raFile, (_raCount - 1), (_raCount - 1));
    system(command);
}

在这个场景中,我定义了一个字符指针commandcommand 的大小取决于函数传递的变量 raFile 和下一行的命令。

最佳答案

C 中的

char* 没有相关存储。这与 fortran 等语言不同,后者的字符类型代表固定大小的字符串。您要么必须使用 char command[size+1] 之类的方法定义字符 array,要么使用 malloc() 进行分配(不要忘记在处理完字符串后调用 free())。

棘手的部分是正确计算所需的长度。然而,在 POSIX-2008 标准中,已经有一个名为 asprintf() 的函数,它正是您所需要的:它将 sprintf() 的函数与使用 malloc() 分配足够的内存(同样,不要忘记在处理完字符串后调用 free())。用法如下:

void processRa(int _raCount, char *raFile) {
    char *command; // How to correctly define this variable ?
    asprintf(&command, "somecomm -r %s -N%d-%d ", raFile, (_raCount - 1), (_raCount - 1));
    system(command);
    free(command);
}

关于c - 定义可变大小的 CHAR 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22217565/

相关文章:

c++ - 在 linux 中使用 fork() 时使用指针的引用值

c++ - 函数指针说明

c - 如何在循环中实例化新的结构实例

c - 带有反斜杠的多行配方和在 makefile 中没有反斜杠的多行配方之间的区别

c - 如何检测控制台或 Windows 应用程序?

c - 如何使用冒泡排序并对带有字符串的二维数组进行排序

c - 在每个函数的开头应用断点

android - OPEN GL ES 和 EGL 库之间的混淆

c - 取消引用指向不完整类型的指针 - 列表

c - 释放指向指针的指针