C语言中sscanf的分段错误

C语言中sscanf的分段错误,c,malloc,scanf,C,Malloc,Scanf,非常新的C,所以请容忍我!我试图使用sscanf将3个参数从“指令”中以空格分隔,读入3个字符串。到目前为止,我已获得以下代码: char * buffer; buffer = (char*) malloc (5000); sscanf(instruction, "%s %s %s", &opcode, &arg1, &arg2, buffer); 然而,尽管编译良好,但sscanf所在的最后一条线路上存在seg故障。上次我看到这个错误是因为变量中没有足够的内存来存储信

非常新的C,所以请容忍我!我试图使用sscanf将3个参数从“指令”中以空格分隔,读入3个字符串。到目前为止,我已获得以下代码:

char * buffer;
buffer = (char*) malloc (5000);
sscanf(instruction, "%s %s %s", &opcode, &arg1, &arg2, buffer);
然而,尽管编译良好,但sscanf所在的最后一条线路上存在seg故障。上次我看到这个错误是因为变量中没有足够的内存来存储信息。我猜我没有正确使用malloc


很遗憾,我无法发布整个代码,因为它不属于我。

您使用的
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);

您使用的
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);

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

操作码的类型是什么,
arg1
arg2
?我想问题就在那里。然后去掉符号。然后,三个
%s
转义将填充它们(假设它们指向有效内存且缓冲区足够大)。注意,
缓冲区
将永远不会被填充,因为您的格式字符串只引用三个参数。谢谢-刚刚完成。不过,这一行仍然存在seg故障-我需要为其中一个变量分配内存吗?首先,您需要向我们展示您是如何声明这些变量的,以及您之前执行的任何操作(例如分配内存或清除它们)。此外,
指令是如何填充的?操作码的类型是什么,
arg1
arg2
?我想问题就在那里。然后去掉符号。然后,三个
%s
转义将填充它们(假设它们指向有效内存且缓冲区足够大)。注意,
缓冲区
将永远不会被填充,因为您的格式字符串只引用三个参数。谢谢-刚刚完成。不过,这一行仍然存在seg错误-我需要为其中一个变量分配内存吗?首先,您需要向我们展示您是如何声明这些变量的,以及您之前所做的任何操作(例如分配内存或清除它们)。另外,
指令是如何填充的?完成了,非常感谢。将在3分钟内勾选答案。@JamesHadley:别忘了调用
free()
,以释放执行此操作的
malloc()
:)分配的内存,非常感谢。将在3分钟内勾选答案。@JamesHadley:别忘了调用
free()
,以释放
malloc()
:)分配的内存