[英]Segmentation fault sprintf [c]
我需要将两个参数传递给 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);
}
该脚本运行良好,我试过了。 但我总是遇到分段错误。 问题是:为什么?
谢谢
您正在写入尚未分配任何 memory 的script
指向的 memory 位置。
尝试类似:
#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);
}
您需要为script
分配空间
char *script = malloc(/* string size */);
为了能够使用它。
您没有为script
分配任何 memory 。
char *script;
创建一个指针,但它必须指向您分配的东西,在您的情况下,它的值是未定义的。 使用malloc
分配 memory,完成后free
。
改变这一行:
char *script;
对此:
char script[255];
sprintf
尝试将结果字符串写入您尚未初始化的script
。
您没有为变量script
分配任何 memory 。 sprintf
function 期望它的第一个参数是指向已经分配的 memory 的指针,但是您的script
从未初始化,这意味着它是 Z37A6259CC0C1DAE299A7866489DFF0 或垃圾。
您正在格式化为“脚本”而不分配任何 memory 来接收格式化的字符串。
相反,分配:
char script[1024];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.