C 输入返回正确的字符串,但不返回';我不能运行这个函数
我有以下代码:C 输入返回正确的字符串,但不返回';我不能运行这个函数,c,string,malloc,getline,strlen,C,String,Malloc,Getline,Strlen,我有以下代码: bool get_command(char *cmd){ char *cm = (char*)malloc(strlen(cmd)); strcpy(cm,cmd); const char *tok = strtok(cm," "); if(!tok) return false; if(!strcmp(tok,"MULTIPLY")) { printf("WORKING!\n")
bool get_command(char *cmd){
char *cm = (char*)malloc(strlen(cmd));
strcpy(cm,cmd);
const char *tok = strtok(cm," ");
if(!tok)
return false;
if(!strcmp(tok,"MULTIPLY"))
{
printf("WORKING!\n");
return true
}
....
int main(void){
while(1){
char *input = NULL;
char buf[MAX_LINE_LENGTH] = {0};
int read;
size_t len;
read = getline(&input, &len, stdin);
if (-1 != read){
printf("Input: %s\n", input);
sprintf(buf, "%s", input);
get_command(input);
} else {
printf("No line read\n");
}
free(input);
}
return 0;
}
当我运行代码并输入MULTIPLY
时,它返回
输入:乘法
标记:乘法
但是,这不会打印出正在工作的
。有人能解释为什么这不能按预期工作吗?在您的代码中,您需要更改
char *cm = (char*)malloc(strlen(cmd));
到
有终止空字符的空间
strlen()
不计算终止的null,如果在复制过程中没有分配内存来保存null,您将面临内存溢出问题
根据strcpy()
char*strcpy(char*dest,const char*src)代码>
strcpy()
函数将src
指向的字符串(包括终止的空字节('\0'
)复制到dest
指向的缓冲区。字符串不能重叠,目标字符串dest
必须足够大才能接收副本
也就是说,根据getline()
getline()
从流中读取整行,将包含文本的缓冲区地址存储到*lineptr
中。缓冲区以null结尾,如果找到换行符,则包含换行符
由于您的分隔符字符串不包含\n
,因此令牌将包含\n
。要避免,请执行以下任一操作
- 在分隔符字符串中包含
\n
- 使用
strncmp()
进行比较
- 获取输入后,剥去
\n
另外,请输入malloc()
Hmm的返回值,我认为这是空终止符的问题,所以我尝试了这个方法,但似乎仍然没有打印任何内容。@KadanaKanz,尝试在get\u命令的开头添加cmd[strcspn(cmd,“\n”)]=0
@KadanaKanzgetline()
读取换行符并将其存储到输入缓冲区。您可以尝试使用strncmp()
,它会起作用。或者,您必须剥去尾部的\n
@CoolGuy,这才是有效的!非常感谢。(也得到了一些很好的阅读!:)@Sourav谢谢你提供的信息,我下次一定会这样做。在调用strtok后尝试打印tok
。@tivn-tok与输入相同,它应该调用printf函数,但不起作用tok
可能等于“乘法\n”
。@D.Shawley不是!我从酷哥的评论中发现了!在从get_command()返回之前,需要调用“free(cm)”,否则代码将出现内存泄漏
char *cm = malloc(strlen(cmd) + 1);