C中sscanf的分段错误

时间:2012-05-31 22:35:08

标签: c malloc scanf

对C来说很新,所以请耐心等待!我正在尝试使用sscanf读取由“指令”中的空格分隔的3个参数到3个字符串中。到目前为止,我已经得到了以下代码:

char * buffer;
buffer = (char*) malloc (5000);
sscanf(instruction, "%s %s %s", &opcode, &arg1, &arg2, buffer);

然而,虽然它编译得很好,但在sscanf所在的最后一行有一个seg错误。上次我看到这个错误是因为变量中没有足够的内存来存储信息。我猜我没有正确使用malloc?

我不能发布整个代码,因为它不属于我。

2 个答案:

答案 0 :(得分:4)

删除&符号。然后三个%s转义将填充它们(假设它们指向有效内存并且缓冲区足够大)。请注意,缓冲区将永远不会填充,因为您的格式字符串仅指三个args

答案 1 :(得分:1)

您未正确使用sscanf。试试这个:

#define BUFFER_SIZE 1024 /* generally good practice to use constants */

char *opcode = (char *)malloc(BUFFER_SIZE);
char *arg1 = (char *)malloc(BUFFER_SIZE);
char *arg2 = (char *)malloc(BUFFER_SIZE);
sscanf(instruction, "%s %s %s", opcode, arg1, arg2);

根据您使用这些变量的方式,最好将它们分配到堆栈中:

char opcode[BUFFER_SIZE];
char arg1[BUFFER_SIZE];
char arg2[BUFFER_SIZE];
sscanf(instruction, "%s %s %s", opcode, arg1, arg2);