2024-10-05 11:44:28 发布
网友
我试图通过管道进入read,但在第二次输入之后它一直在分段。我做错什么了?提前谢谢。在
$ ./read < <(python -c 'print "BBA\nBBADD\n",') Please enter your first name: buf= BBA BBA Please enter your last name: buf= Segmentation fault (core dumped)
我附上了read的代码作为参考,重要的部分是read()
`
read对字符串一无所知,所以它只是愉快地读取sizeof(buf)个字符,而不使用NUL终止buf。调用puts(buf)会导致未定义的行为。在
read
sizeof(buf)
buf
puts(buf)
对于简单的字符串I/O,不应该使用这样的低级函数;而应该使用getline。如果您确实想使用read,那么读取较小的块,检查每个调用的返回值并使用它;它告诉您读取了多少。在
getline
read
对字符串一无所知,所以它只是愉快地读取sizeof(buf)
个字符,而不使用NUL终止buf
。调用puts(buf)
会导致未定义的行为。在对于简单的字符串I/O,不应该使用这样的低级函数;而应该使用
getline
。如果您确实想使用read
,那么读取较小的块,检查每个调用的返回值并使用它;它告诉您读取了多少。在相关问题 更多 >
编程相关推荐