gpt4 book ai didi

c - 为什么这些 char 数组似乎越界了? (Linux系统编程范例/C/readv)

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:34 26 4
gpt4 key购买 nike

此示例取自 Linux System Programming书,第 88 页。

代码:http://pastebin.com/mEfmHbPP

引用的文本文件“buccaneer.txt”包含以下内容:

The term buccaneer comes from the word boucan.
A boucan is a wooden frame used for cooking meat.
Buccaneer is the West Indies name for a pirate.

这个程序的输出应该是这样的 3 行:

0: The term buccaneer comes from the word boucan.
1: A boucan is a wooden frame used for cooking meat.
2: Buccaneer is the West Indies name for a pirate.

但是我的机器上发生了一些奇怪的事情,并显示了这样的输出:

0: The term buccaneer comes from the word boucan.
1: A boucan is a wooden frame used for cooking meat.
Buccaneer is the West Indies name for a pirate.
The term buccaneer comes from the word boucan.
2: Buccaneer is the West Indies name for a pirate.
The term buccaneer comes from the word boucan.

测试时,我看到数组 foobarbaz 报告正确的 sizeof() 值,iovcnt 等于 3 并且 readv 返回的 nr 值为 145,这与我的系统报告的文件大小一致。当我尝试打印每个数组的内容时,仍然报告正确的 sizeof() 但包含更多字符。从最后一个 list :第一行 - foo 的内容,第 2、3、4 行 - 栏的内容,第 5,6 行 - baz 的内容。

我不是 C 的新手,但我还没有遇到过这样的问题。请指教。

最佳答案

每个字符串上都没有空终止符 - 因此,sizeof 可以,但您的变量本身不行。为每个字符串添加一个空终止符或为您的 printf 使用以下格式化字符串:

"%x.xs"

(将 X 替换为字符串的 sizeof 值)

关于c - 为什么这些 char 数组似乎越界了? (Linux系统编程范例/C/readv),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5553638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com