gpt4 book ai didi

c - read() 和 harcodded 创建的字符之间的差异(C 语言)

转载 作者:行者123 更新时间:2023-11-30 20:37:01 24 4
gpt4 key购买 nike

我尝试制作登录功能,但卡住了......

我有两个应用程序(服务器和客户端)。我从客户端向服务器发送由 read(0,username,100) 创建的用户名。

在服务器中,如果我想检查客户端中通过读取引入的用户名(例如:test)是否等于"test"strcmp( username,"test") == 0,不相等,我不知道为什么。

你能帮我吗?

谢谢。

最佳答案

可能的原因有很多,但幸运的是不是那么多,

  1. 在这种情况下(并且可能在任何情况下都可能只是为了确保),你可以这样做

    char username[100];
    ssize_t length;
    if ((length = read(0, username, sizeof(username) - 1)) == -1)
    pleaseAbortSubsequentOperationsOn_username();
    username[length] = '\0';

    将确保usernamenul终止。当然,从另一端发送的数据中可能会嵌入 '\0' 以及许多其他微妙之处,但如果您从另一端发送的只是纯文本,这可能会有所帮助.

    另请注意,另一个限制是超过 99 个字符的字符串,此方法将自动截断该字符串。

    我的意思是这还不够,但它可能会帮助您走向正确的方向。

  2. 可能存在 '\n' 或其他一些控制字符 ( see this comment ),并且它正在由 strcmp() 进行比较导致错误的比较。因此,您也可以检查这一点,或者编写一个忽略空格的比较函数,或者从读取的字符串中删除前导/尾随空格。

您可以发现这些问题可能以不同的组合出现,因此使用 printf() 检查将帮助您了解问题所在。

对于'\0'终止符问题,您需要一个内存调试器,例如 valgrind ,或您的环境的等效内容。但上面第一点中建议的简单修复足以进行测试。

关于c - read() 和 harcodded 创建的字符之间的差异(C 语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33960312/

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