C++ - 使用代码块从文件中读取 IP 地址
C++ - Using codeblock to read ip adress from a file
我一直在尝试从文件中取出IP地址,以及其他一些参数。一开始我想提一下,我的积分不到 10 分,而且我无法上传图片 - 这就是为什么我将提供图片链接的原因。
这是我从中读取的配置文件的屏幕截图: https://pasteboard.co/IpyYdxd.png
我的代码将端口、datagram_size和transmission_speed作为 int 变量,将它们与我的 udp 套接字实现一起使用没有问题。但是,它不允许我使用我的 GROUP 变量,它是 std::basic_string 类型,因为它需要 const char* 变量。
以下是我的控制台应用程序的视图: https://pasteboard.co/Ipza3hON.png
我尝试使用 value.c_str() 函数将字符串/整数转换为常量字符,但是出了点问题。
// FILE TO BE SEND
FILE *file_handler;
if((file_handler = fopen("output_file.dat", "rb")) == NULL)
{
printf("Error: unable to read filen");
exit(-1);
}
char buf[DATAGRAM_SIZE];
int i = 0;
// CONFIGURATION FILE
std::ifstream cFile ("plik_konfiguracyjny.txt");
if (cFile.is_open()){
std::string line;
set_light_red // set color to light red
while(getline(cFile, line)){
line.erase(std::remove_if(line.begin(), line.end(), isspace),line.end());
if(line[0] == '#' || line.empty()){ // if line starts with # or is empty - ignore
continue;
}
auto delimiterPos = line.find("=");
auto name = line.substr(0, delimiterPos);
auto value = line.substr(delimiterPos + 1);
printf(value.c_str()); // display received value from current line
printf("n");
printf("zmienna i: %in",i); // display i to check what's the value in current loop
if(i == 0){
group = value.c_str(); // CONVERT STRING TO CONST CHAR*
}
if(i == 1){
port = std::stoi(value);
}
if(i == 2){
DATAGRAM_SIZE = std::stoi(value);
}
if(i == 3){
wait_for = std::stoi(value);
}
i = i +1;
}
set_white
printf("PARAMETRY TRANSMISJI ");
set_green
printf("ZALADOWANEnn");
set_white
}
else {
printf("PARAMETRY TRANSMISJI ");
set_red
printf("NIEZALADOWANEnn");
set_white
}
// create UDP with parameters from file
memset((char *) &addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(group);
addr.sin_port = htons(port);
没有错误,并且可以正常编译,但是它不会在给定文件中使用IP地址。
这是我的意思是用图片(和出色的绘画技巧)显示 https://pasteboard.co/IpzacMF.png
我们无法判断group
是什么。可能是char *
,可能是std::string
,也可能是别的东西。
但是您的评论表明group
属于const char *
型.如果这是正确的,那么group = value.c_str();
没有任何意义。为什么要将group
设置为指向内容不断变化的缓冲区?是的,它在这一秒包含主机,但它即将被循环的下一次迭代覆盖。为什么要隐藏指向它的指针?
如果value
的内容在循环的下一次迭代中大小增加,并且std::string
的内部实现释放了现有缓冲区并分配了一个新的、更大的缓冲区,该怎么办?现在,group
指向一个甚至不再分配的缓冲区!
不要存储来自c_str
的返回值,并在修改字符串后尝试访问它。
- 正在将csv文件读取为双精度矢量
- 将从格式化文本文件读取的文本数据存储到链表
- C++ 读取文件读取文件不正确
- 使用对象文件读取三角形数据网格
- 如何减慢从 BVH 文件读取的 opengl 动画?
- 从文件读取,并写入函数C++中的数组
- 从对象C++中的文件读取内容时出现分段错误
- 从文件读取并通过矢量输出到控制台
- 尝试将字符串从文件读取到无符号字符向量中
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 简化文件读取的函数
- 如何将逗号分隔的文件读取为 2D int 数组?
- 在 c++ 中将数据从文件读取到队列中
- 'std::wstring_convert'尽可能多地转换(从 UTF8 文件读取块)
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 文件读取C++包括空格键
- 从文件读取时未将值推回矢量
- 从文件 C++ 读取时的无限循环
- 从同一文件读取和写入?
- 从.txt文件读取到C++中的双精度向量