C 读取系统调用垃圾字符
我正在尝试读取用户输入的文件名,然后尝试打开指定的文件。我遇到的问题是,输入的末尾似乎添加了垃圾字符。(我在尝试打印userInput变量的printf()时发现了这一点)C 读取系统调用垃圾字符,c,unix,system-calls,C,Unix,System Calls,我正在尝试读取用户输入的文件名,然后尝试打开指定的文件。我遇到的问题是,输入的末尾似乎添加了垃圾字符。(我在尝试打印userInput变量的printf()时发现了这一点) if(读取(0,用户输入,128)
if(读取(0,用户输入,128)<0)
写入(2,“读取时出错。\n”,31);
知道怎么回事吗?
我从codewiki获得了这个代码
谢谢您没有发布足够的信息来发布明确的答案,但以下是我有根据的猜测:
C字符串以null结尾。如果您只读取部分字符串而不终止它,但尝试将其打印为C字符串,您将得到未定义的行为-实际上,您会看到垃圾跟随它。Ok,这是否意味着我必须在从用户读取后手动附加空字符?我也尝试过strcat(userInput,“\0”),但在上面的代码printf(“CHECK1%s CHECK2”,userInput)之后仍然得到了junka;printf(“第二个%s部分”,用户输入);检查它是否正确读取,但在打印字符串后(在printf语句中的%s之后)
strcat
仅对C字符串有效。第22条军规(顺便说一句,这是不可能的)input[pos]=0
hmm,你知道我可以用什么来找到字符串的长度吗(因为它的长度取决于用户)?好的,我知道了,谢谢你的帮助Karoly!对于其他可能会看到这一点的人,我做了如下工作:nRead=read(0,userInput,128);用户输入[nRead-1]='\0';
if(read(0, userInput, 128) < 0)
write(2, "An error occurred in the read.\n", 31);