对C来说很新,所以请耐心等待!我正在尝试使用sscanf读取由“指令”中的空格分隔的3个参数到3个字符串中。到目前为止,我已经得到了以下代码:
char * buffer;
buffer = (char*) malloc (5000);
sscanf(instruction, "%s %s %s", &opcode, &arg1, &arg2, buffer);
然而,虽然它编译得很好,但在sscanf所在的最后一行有一个seg错误。上次我看到这个错误是因为变量中没有足够的内存来存储信息。我猜我没有正确使用malloc?
我不能发布整个代码,因为它不属于我。
答案 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);