在此代码:
char* realtor_command[120];
for(int i=0;i<REALTOR_MAX_COMMAND_LENGTH;i++){
realtor_command[i]=malloc(sizeof(120));
}
来控制循环REALTOR_MAX_COMMAND
字符串创建的120个字符串,一个数组(大概是这应该是120?)并将它们设置为新分配的4或8字节字符串(sizeof(120)
表示sizeof(int)
,它是4或8字节)。由于这些字符串是新分配的,它们将包含任意数据,并且可能不以null结束符结束。
这很重要,因为strlen()
只是在字符串上循环,直到找到空终止符为止,所以它不能用非空终止的字符串。
你可以自己添加一个null终止符,但是这些字符串会包含任意垃圾直到字符串的末尾,并且它们可能在它们内部具有空终止符。你可以让他们空终止启动,但随后strlen()
总是返回0。
什么可能是更好的是分配这些字符串当你真正填补他们,并让他们为空指针,直到然后:
char* realtor_command[120];
for (int i = 0; i < 120; i++) {
realtor_command[i] = NULL;
}
char input_buffer[REALTOR_MAX_COMMAND];
// Read in one string, then copy it so we can re-use the buffer
fgets(input_buffer, REALTOR_MAX_COMMAND, stdin);
realtor_command[0] = strdup(input_buffer);
这也将避免代码中的内存泄漏。
注意,你可能会想,以确保通过fgets
阅读字符串中包含换行,以确保输入符合贵公司的缓冲:
if (strstr(input_buffer, "\n") == NULL) {
// error, input didn't fit in our buffer!
}
告诉你如何使用'strlen',请一起错误的价值。 – Downvoter
什么是'sizeof(120)'?你分配的内存少于120字节。 – ForceBru
这将是sizeof(int),4或8. –