0

对 C 非常陌生,所以请多多包涵!我正在尝试使用 sscanf 将 3 个由空格分隔的参数从“指令”读取到 3 个字符串中。到目前为止,我有以下代码:

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

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

不幸的是,我无法发布整个代码,因为它不属于我。

4

2 回答 2

4

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

于 2012-05-31T22:43:54.560 回答
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);
于 2012-05-31T22:43:45.497 回答