Ошибка сегментации sprintf [c] - PullRequest
4 голосов
/ 19 июля 2011

Мне нужно передать два аргумента в сценарий оболочки, вот код:

#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 ]

5 голосов
/ 19 июля 2011

Вы пишете в область памяти, указанную 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);
}
3 голосов
/ 19 июля 2011

Вам необходимо выделить место для script

char *script = malloc(/* string size */);

, чтобы иметь возможность его использовать.

2 голосов
/ 19 июля 2011

Вы не выделили никакой памяти для script.

char *script; создает указатель, но он должен указывать на то, что вы выделили, в вашем случае его значение не определено.Используйте malloc для выделения памяти и free, когда вы закончите.

1 голос
/ 19 июля 2011

изменить эту строку:

char *script;

к этому:

char script[255];
0 голосов
/ 19 июля 2011

Вы форматируете в «скрипт» без выделения памяти для получения отформатированной строки.

Вместо этого выделите:

char script[1024];

0 голосов
/ 19 июля 2011

Вы не выделяете память для переменной script. Функция sprintf ожидает, что ее первый параметр является указателем на уже выделенную память, но ваш script никогда не инициализируется, что означает, что он нулевой или мусорный.

0 голосов
/ 19 июля 2011

sprintf пытается записать строку результата в script, который вы не инициализировали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...