【问题标题】:read system call junk characters读取系统调用垃圾字符
【发布时间】:2014-03-13 20:35:57
【问题描述】:

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

if(read(0, userInput, 128) < 0)
    write(2, "An error occurred in the read.\n", 31); 

知道出了什么问题吗? 我从 codewiki 得到了这段代码 谢谢

【问题讨论】:

    标签: c unix system-calls


    【解决方案1】:

    您没有发布足够的信息来发布明确的答案,但这是我有根据的猜测:

    C 字符串以空值结尾。如果您只读取部分字符串并且不终止它,而是尝试将其打印为 C 字符串,您将得到未定义的行为 - 实际上,您会看到它后面的垃圾。

    【讨论】:

    • 好的,这是否意味着我必须在读取用户信息后手动附加一个 Null 字符?我也尝试过 strcat(userInput, "\0") 但最终还是变得垃圾
    • 在上面的代码之后我有 printf("CHECK1 %s CHECK2", userInput); printf("第二个 %s 部分", userInput);检查它是否正确读取,但在打印字符串后(在 printf 语句中的 %s 之后)我最终得到了那些奇怪的符号
    • strcat 仅适用于 C 字符串。 catch-22(顺便说一句,这是一个无操作)。 input[pos] = 0
    • 嗯,知道我可以用什么来查找字符串的长度(因为它的长度取决于用户)?
    • 好的,我想通了,感谢卡罗利的帮助!对于其他可能看到这个的人,这就是我所做的: nRead = read(0,userInput,128); userInput[nRead-1] = '\0';
    猜你喜欢
    • 2021-08-17
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多