分段故障sprintf [E]

时间:2011-07-19 19:25:46

标签: c shell

我需要将两个args传递给shell脚本,这里是代码:

#include <stdio.h>

#include <stdlib.h>

void main()
{
char *script;
int lines = 1;
sprintf(script, "/...path.../line.sh %d %d", lines, lines);
system(script);
}

脚本运行良好,我试过了。但我总是得到分段错误。问题是:为什么?

由于

7 个答案:

答案 0 :(得分:5)

您正在写入script指向的内存位置,该位置尚未分配任何内存。

尝试类似:

#include <stdio.h>

#include <stdlib.h>

void main()
{
    char script[100]; // Allocate as much as you need here for your string, not
    int lines = 1;    // necessarily 100
    sprintf(script, "/...path.../line.sh %d %d", lines, lines);
    system(script);
}

答案 1 :(得分:3)

您需要为script

分配空间
char *script = malloc(/* string size */);

能够使用它。

答案 2 :(得分:2)

您没有为script分配任何内存。

char *script;创建一个指针,但它必须指向你已经分配的东西,在你的情况下它的值是未定义的。使用malloc分配内存,并在完成后使用free

答案 3 :(得分:1)

更改此行:

char *script;

到此:

char script[255];

答案 4 :(得分:0)

sprintf尝试将结果字符串写入您尚未初始化的script

答案 5 :(得分:0)

您没有为变量script分配任何内存。 sprintf函数期望它的第一个参数是指向已经分配的内存的指针,但是script永远不会被初始化,这意味着它是空的或垃圾。

答案 6 :(得分:0)

您要格式化为&#34;脚本&#34;没有分配任何内存来接收格式化的字符串。

相反,分配:

char script[1024];