我需要将两个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);
}
脚本运行良好,我试过了。但我总是得到分段错误。问题是:为什么?
由于
答案 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];