char 相关问题

char通常是指字符数据类型,表示文本字母。

比较字符忽略大小写的正确方法是什么?

我想知道比较两个字符忽略大小写的正确方法是什么,适用于所有文化。另外,比较器。默认是测试两个字符而不忽略的最佳方法...

回答 10 投票 0

我的字符串比较函数返回 false,即使字符串位于数组中

对于以下代码,当我搜索高帽时,我没有得到所需的结果(即找到) 相反,找不到输出。 我认为这与 char 数组在

回答 1 投票 0

C 中可以将 char[] 转换为 char* 吗?

我正在做一项作业,我们必须将一系列字符串从文件读取到数组中。我必须在数组上调用密码算法(密码转置二维数组)。所以,一开始我把所有的

回答 6 投票 0

用户输入字符串的最后一个字符不正确[重复]

我对 Rust 非常陌生,我正在尝试从用户输入中获取字符串的最后一个值。我尝试实现它,但它没有给出预期的输出 println!("请输入温度...

回答 1 投票 0

寻找每种数值数据类型的限制时遇到问题

我正在使用 Bjarne Stroustrup 的《C++ 编程语言》学习 C++,同时做练习 4.5(在您的系统上,以下类型的最大和最小值是什么:char、...

回答 1 投票 0

查找每种数据类型的 C++ (CPP) 限制时出现问题

我正在使用 Bjarne Stroustrup 的《C++ 编程语言》学习 C++,同时做练习 4.5(在您的系统上,以下类型的最大和最小值是什么:char、...

回答 1 投票 0

GTK 函数调用弄乱了完全不相关的 char* 值

我在 gtk 应用程序中有类似的代码(但范围更大): #包括 结构体 Tstruct { 字符*字符串; } void func(struct TStruct *tstruct) { 查查拉[8]; 冲刺 (

回答 2 投票 0

C++、ifstream 和 char

我正在从磁盘读取 PNG 文件并将字节插入到字符向量中,并使用 new 关键字实例化。 打开文件: std::ifstream 文件("./images/orange.png", std::ios_ba...

回答 1 投票 0

如何将单个字符转换为以 null 结尾的 const char*

我想循环遍历一串字符,将每个字符取出,并且每个字符都必须是 const char* 类型,这样我就可以将其传递给函数。这是一个例子。 字符串 thestring = "abc123"; ...

回答 5 投票 0

Char 类型和开关盒问题

我正在尝试做一个带有函数的计算器,我使用符号“+”“-”“/”“*”来选择操作,“x”来关闭程序,如果我插入任何其他值该程序将要求...

回答 1 投票 0

如何在 C 中从数组打印无符号字符?

尝试在 C 中打印字符 ▒。 我最初想将该字符与其他标准 ASCII 字符(例如字母,因此值低于 127)一起包含在 char 数组中。 我找到了...

回答 1 投票 0

转换方面的差异:char 与 unsigned char

在这个函数中,为什么我们需要使用 unsigned char 进行转换?由于两者的范围都是“255”,我们不能用 char 进行转换并得到相同的结果吗?为什么选择无符号字符? 假设没有

回答 1 投票 0

char 和 char [1] 有什么不同?

#包括 #包括 结构学生{ 整数ID; 字符名称[10]; 炭性; 积分等级; }; int main() { 结构学生标准; std.id = 1; strcpy(std.name, "

回答 1 投票 0

strcpy 堆栈粉碎并分配了足够的内存

运行以下代码时出现堆栈崩溃错误: #包括 #包括 #包括 #定义 MAX_NAME 12 #定义MAX_DIR 10 结构节点...

回答 1 投票 0

strcat 将字符连接到字符串上?

使用 GDB,我发现当我尝试此操作时出现分段错误: strcat(字符串,¤tChar); 鉴于字符串被初始化为 字符*字符串=“”; 和 currentChar 是 字符

回答 8 投票 0

db2 中的 CONVERT 或 CAST,如何将列从 char 转换为十进制

我正在尝试将两列连接在一起。 选择强制转换(用户为十进制) from trans where user <> date 日期是小数 用户是 CHAR 但我收到错误:数据映射转换 e...

回答 1 投票 0

使用 sprintf 将一位数存储在 char 向量中

c[100] 是 char 的向量,x 是 1 到 9 之间的数字 如何将 x 存储在 c 中的给定位置 (n) 我尝试的是: sprintf(c[n], "%d", x); 但它不起作用 如果我写: 春天...

回答 1 投票 0

尝试设置字符数组的字符时程序崩溃

我的程序出现了这种奇怪的行为,我无法弄清楚。我的教授向我展示了我的程序中的一个缺陷,当我构造一个对象时,我只是复制一个 char 指针,而不是创建一个新的 c...

回答 5 投票 0

我用C++和socket编程写的程序无法在每次消息发送后清除消息

程序中的“行”部分需要在每次消息传输后清除,但我一直无法做到这一点。 #包括 #包括 #包括 程序中的“行”部分需要在每次消息传输后清除,但我一直无法做到这一点。 #include <winsock2.h> #include <ws2tcpip.h> #include <stdio.h> #include <stdbool.h> #include <iostream> const char* ip = "127.0.0.1"; int port = 1752; #pragma comment (lib, "ws2_32.lib") int main() { WSADATA wsadata; if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0) { printf("[!] Winsock failed..\n"); exit(-1); } SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock == INVALID_SOCKET) { printf("[!] Socket creat was fail..\n"); WSACleanup(); exit(-1); } struct sockaddr_in address; address.sin_family = AF_INET; address.sin_port = htons(port); inet_pton(AF_INET, ip, &(address.sin_addr)); if (connect(sock, (struct sockaddr*)&address, sizeof(address)) == SOCKET_ERROR) { printf("[!] Connect was fail.. \n"); closesocket(sock); WSACleanup(); exit(-1); } char buffer[1024]; char name[1024]; printf("Enter the username: \n"); std::cin.getline(name, sizeof(name)); size_t nameCount = strlen(name); name[strcspn(name, "\n")] = '\0'; char line[1024]; printf("Enter the messages: \n"); while (true) { std::cin.getline(line, sizeof(line)); size_t charCount = strlen(line); line[charCount - 1] = '\0'; line[strcspn(line, "\n")] = '\0'; sprintf_s(buffer, sizeof(buffer), "%s: %s", name, line); if (send(sock, buffer, strlen(buffer), 0) == SOCKET_ERROR) { printf("[!] Send failed\n"); break; } } WSACleanup(); closesocket(sock); } 我希望“行”部分在每次消息传输后都被完全清除,并且不会与下一条消息混淆,但它没有被正确清除 您不会在每个 line 之后将 send() 的内容清零。这就是为什么您会看到 line 在下一个 cin.getline() 之后可能仍保留较早的数据。您可以使用 std::memset() 进行归零,例如: while (std::cin.getline(line, sizeof(line))) { ... std::memset(line, 0, sizeof(line)); } 另一种选择是注意实际返回给您的字符数 cin.getline(),并且不要使用比这更多的字符。那么你就不需要浪费时间将 line 归零,或者浪费时间使用 strlen() 来计算输出长度。 cin.gcount()返回后,输出长度由cin.getline()报告。 除此之外,我发现您的代码还存在其他一些问题: 缺乏对 cin.getline() 和 send() 足够的错误检查。 您不确定cin.getline()实际上正在向您返回可用数据。 send() 可以(通常确实)返回比请求更少的字节,因此您需要循环调用它,直到所有字节实际上都被接受。 您没有向接收者发送 buffer 的长度或任何终止符,因此接收者无法知道每个 buffer 消息的实际大小。您需要: 在发送消息本身之前发送消息的长度。然后接收器可以先读取长度,然后读取长度所说的字节/字符。 在消息后发送唯一的终止符,例如\n或\0。然后接收器可以读取,直到终结符到达。 在 send() 循环之后关闭应用程序期间,您在 WSACleanup() 之前调用 closesocket()。您需要交换它们。 话虽如此,尝试更像这样的事情: #include <winsock2.h> #include <ws2tcpip.h> #include <iostream> #include <string> #pragma comment (lib, "ws2_32.lib") const char* ip = "127.0.0.1"; int port = 1752; bool sendRaw(SOCKET sock, const void *buffer, size_t bufsize) { const char *pbuf = reinterpret_cast<const char*>(buffer); while (buflen > 0) { int sent = send(sock, pbuf, static_cast<int>(buflen), 0); if (sent == SOCKET_ERROR) { std::cerr << "[!] Send failed\n"; return false; } pbuf += sent; buflen -= sent; } return true; } bool sendStr(SOCKET sock, const std::string& str) { return sendRaw(sock, str.c_str(), str.size()); } int main() { WSADATA wsadata; if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0) { std::cerr << "[!] Winsock startup failed..\n"; return -1; } SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock == INVALID_SOCKET) { std::cerr << "[!] Socket create failed..\n"; WSACleanup(); return -1; } sockaddr_in address = {}; address.sin_family = AF_INET; address.sin_port = htons(port); inet_pton(AF_INET, ip, &(address.sin_addr)); if (connect(sock, reinterpret_cast<sockaddr*>(&address), sizeof(address)) == SOCKET_ERROR) { std::cerr << "[!] Connect failed.. \n"; closesocket(sock); WSACleanup(); return -1; } std::string name; std::cout << "Enter the username:\n"; if (std::getline(std::cin, name) && !name.empty()) { std::string line; std::cout << "Enter the messages:\n"; while (std::getline(std::cin, line)) { if (!sendStr(sock, name + ": " + line + "\n")) { break; } } } closesocket(sock); WSACleanup(); return 0; }

回答 1 投票 0

如何比较 C 中的两个字符串,比较的字符数是从文件接收的字符串中的字符数

我正在尝试用 C 创建一个具有唯一登录名的“银行”程序,为此,我有一个用户名文件,并检查用户输入的用户名是否与预先存在的用户名匹配,并且...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.