【发布时间】:2014-05-18 16:20:04
【问题描述】:
--start of snip--
char name[15];
...
printf("Enter employee name \n");
scanf("%s",name);
printf("strlen %d \n", strlen(name));
--end of snip --
Output:
Enter employee name
Veronica
8
为什么没有在末尾添加空字符!?我错过了什么吗?
请人解释一下。
已编辑:
正在使用 fgets 从打开的文件中读取行并使用 strtok(line,"\t ")
从线路中获取令牌。
--snip--
char * chk;
char line[100];
char temp_name[15];
while(fgets(line, sizeof line, filep))
{
chk = strtok(line, " \t");
while(chk !-= NULL)
{
strcpy(temp_name, chk);
chk = strtok(NULL, " \t");
}
}
--snip --
问题:
我猜测由于 strtok 定界符使用不当处理,额外字符被添加到 temp_name(不仅仅是名称)的末尾。
解决方案:
if(!strncmp(temp_name, name, strlen(name))) // this is one fix
其他用途
sscanf(line, "%s", temp_name); //easy fix
无论如何,我很困惑是否在 strtok 操作中添加了 NULL 或额外字符。
感谢您的回答。
此外,如果有人想帮助我应该在 strtok 中使用什么分隔符来避免任何空格、制表符等。
【问题讨论】:
-
它就在那里。
strlen不算。 -
如果不存在,strlen 将无法测量字符串
-
还要小心
scanf。如果 usr 输入超过 15 个字符的字符串会怎样? -
@Johnny 堆栈溢出会发生,我需要在那里修复,对吧!?或者除了检查之外还有什么更好的方便的解决方案!?