--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使用什么分隔符以避免任何空格,制表符等。
答案 0 :(得分:3)
添加了NUL终止符,但是strlen返回字符串的长度而没有NUL终结符。
答案 1 :(得分:2)
来自man 3 strlen
:
strlen()函数计算字符串s的长度,排除 终止空字节('\ 0')。
答案 2 :(得分:0)
在那里,Null将被添加到scanf末尾的数组中。 strlen函数将为您提供字符数,直到NULL。在字符串长度计算期间不计算NULL