char 相关问题

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

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

Powershell:如何将许多特殊字符转义为数据,而不是运算符?

在理解如何在 PS 中转义字符时遇到问题,因此它们不会被解释为运算符或指令。我正在编写一个 PS 脚本来查找文件名中要禁止的字符,并且

回答 1 投票 0

如何将字符转换为字符串?

我有一个字符,我需要一个字符串。如何从一种转换为另一种?

回答 14 投票 0

为什么可以将 const char* 分配给 char*?

我知道例如“hello”是const char*类型。所以我的问题是: 我们如何将像“hello”这样的文字字符串分配给非常量 char*,如下所示: char* s = "你好"; // “你好”是类型...

回答 5 投票 0

C++ while 循环中的重新定义

我正在尝试创建一个循环,向用户询问坐标,然后打印这些坐标(如果它们在 [1, 3] 范围内)。如果它们超出范围,则会打印错误消息。如果输入是“q”,则

回答 2 投票 0

将 Int 转换为 Char * 并返回 C

编辑:我编辑了我的问题以修复一些错误并使我想做的事情更清楚。 我想将 4 字节整数转换为长度恰好为 4 字节的 char *,然后再转换回 int。我明白...

回答 1 投票 0

从 Windows Batch 中的 ASCII 代码返回字符

我编写了一个用于批量编码文本字符串的程序。现在,我必须将 ASCII 代码转换为字符。事实上,我必须做相反的事情。 我划分了字符串的字符,我想转...

回答 3 投票 0

将unicode转换为char

如何将 Unicode 字符串转换为 embarcadero c++ 中的 char* 或 char* const?

回答 4 投票 0

如何在 Java 2D 数组中推进行优先并环绕行?

对于一个小型Java应用程序,我有一个名为FIELD的常量SIZE x SIZE 2D字符数组,我试图通过它移动两个对象(由字符符号表示)。我的 Field 类中有两种方法...

回答 1 投票 0

为什么小写字母验证总是失败?

我正在编写一个程序,该程序将密码作为输入并根据以下标准进行验证: 8 个字符或更多 至少有一个大写字母 至少一个小写字母 至少一...

回答 1 投票 0

如何将字节转换为字符,例如1 -> '1'?

如何将字节转换为字符?我的意思不是 ASCII 表示。 我有一个字节类型的变量,并希望它作为一个字符。 我只想进行从字节到字符的转换: 0 ->'0' 1 ->'...

回答 6 投票 0

有没有可以对char值进行计数的函数?

编写一个程序来接受一个句子并执行以下任务: 计算每个单词中存在的元音和辅音的数量 以条形图的形式生成频率的输出,其中...

回答 1 投票 0

如何在 C++ 中 wprintf 字符的值

如何打印一个字符(wstring)的Ascii值? 例如,我想获取 Ö 的 Ascii 值,即 214。 我试过这个: std::wstring ws2 = L"Ö"; wprintf(L"这是...

回答 1 投票 0

计算文本文件中正确的换行数

我正在完成 John Crickett 编码挑战中的第一个练习,即创建一个 wc 克隆来计算文本文件中的行数、字节数、单词数和字符数。我正在进行第四步,

回答 1 投票 0

为什么我的阅读器输出方形符号?

我正在关注一些教程视频并学习如何使用java读取文件。在此示例中,讲师创建一个大小为 100 的 char 数组,然后使用 FileReader 类读取文本文件并

回答 1 投票 0

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