繁体   English   中英

分段错误 sprintf [c]

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM