我有以下代码:
char* realtor_command[120];
for(int i=0;i<REALTOR_MAX_COMMAND_LENGTH;i++){
realtor_command[i]=malloc(sizeof(120));
}
realtor_command[0]="test_string"
realtor_command[1]="next_test_string"
当我使用strlen(realtor_command[0])
时,我得到错误的值,我在之前的问题中读到这是因为它是一个数组而不是指针,但我还没有找到解决此问题的任何方法。
我的问题是,无论如何都要获得realtor_command[i]
的长度?
非常感谢。
编辑:
这就是我调用strlen的方式:
char* matrix=malloc(strlen(realtor_command[8])+1);
答案 0 :(得分:3)
在此代码中:
char* realtor_command[120];
for(int i=0;i<REALTOR_MAX_COMMAND_LENGTH;i++){
realtor_command[i]=malloc(sizeof(120));
}
你创建了一个包含120个字符串的数组,然后遍历REALTOR_MAX_COMMAND
个字符串(大概应该是120?)并将它们设置为新分配的4或8字节字符串(sizeof(120)
表示{{ 1}}这是4或8字节)。由于这些字符串是新分配的,因此它们将包含任意数据,并且可能不会以空终止符结束。
这很重要,因为sizeof(int)
只是循环遍历字符串,直到找到空终止符,因此它不能使用非空终止字符串。
你可以自己添加一个null终止符,但是字符串将包含直到字符串末尾的任意垃圾,并且它们内部可能有空终止符。你可以让它们以null终止符开头,但是strlen()
总是会返回0。
更好的方法是在实际填充它们时分配这些字符串,并在此之前将它们保留为空指针:
strlen()
这也可以避免代码中的内存泄漏。
请注意,您可能希望确保fgets
读取的字符串包含换行符,以确保输入适合您的缓冲区:
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);