Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读取系统调用垃圾字符_C_Unix_System Calls - Fatal编程技术网

C 读取系统调用垃圾字符

C 读取系统调用垃圾字符,c,unix,system-calls,C,Unix,System Calls,我正在尝试读取用户输入的文件名,然后尝试打开指定的文件。我遇到的问题是,输入的末尾似乎添加了垃圾字符。(我在尝试打印userInput变量的printf()时发现了这一点) if(读取(0,用户输入,128)

我正在尝试读取用户输入的文件名,然后尝试打开指定的文件。我遇到的问题是,输入的末尾似乎添加了垃圾字符。(我在尝试打印userInput变量的printf()时发现了这一点)

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);