#include<stdio.h> int main(int argc, char const *argv[]) { FILE *fp=fopen("1.txt","w+"); if(fp=NULL) { perror("fopen err"); return -1; } char ch[32]="hello"; fwrite(ch,sizeof(char),32,fp); char ch1[32]; rewind(fp); fread(ch1,sizeof(char),32,fp); for(int i=0;i<5;i++) { printf("%c",ch1[i]); } putchar(10); fclose(fp); return 0; }
时间: 2024-04-28 16:19:46 浏览: 8
这段代码是一个简单的文件读写程序,它打开一个名为"1.txt"的文件,并以可读写的方式打开它。如果打开文件失败,程序将输出"fopen err"并返回-1。程序将字符串"hello"写入文件中,然后将文件指针移回文件开头。接着,程序从文件中读取32个字符到数组ch1中,并输出前5个字符到控制台。最后,程序关闭文件并返回0。
需要注意的是,程序中if(fp=NULL)应该是if(fp==NULL),因为"="是赋值操作符,而"=="才是判断相等的操作符。
相关问题
windows环境下#include <stdio.h> #include <stdlib.h> #include <string.h> #include<windows.h> #include <WinSock2.h> #define PORT 8888 int main(int argc, char const *argv[]) { int sock = 0, valread; struct sockaddr_in serv_addr; char buffer[1024] = {0}; char filename[100] = {0}; FILE *fp; // 创建 socket 文件描述符 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("\n Socket creation error \n"); return -1; } // 初始化地址结构体 memset(&serv_addr, '0', sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(PORT); // 将 IP 地址从字符串转换为二进制格式 if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) { printf("\n Invalid address/ Address not supported \n"); return -1; } // 连接服务器 if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { printf("\n Connection Failed \n"); return -1; } // 发送文件名 printf("Enter filename: "); scanf("%s", filename); send(sock, filename, strlen(filename), 0); // 打开文件 fp = fopen(filename, "rb"); if (fp == NULL) { perror("fopen failed"); exit(EXIT_FAILURE); } // 发送文件内容 while (!feof(fp)) { valread = fread(buffer, sizeof(char), sizeof(buffer), fp); send(sock, buffer, valread, 0); memset(buffer, 0, sizeof(buffer)); } // 关闭文件和 socket fclose(fp); close(sock); return 0;}该怎么写
这是一个基于 Socket 实现文件传输的客户端程序,需要连接到一个运行在本地的服务器。以下是完整代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#define PORT 8888
int main(int argc, char const *argv[])
{
WSADATA wsa;
SOCKET sock = INVALID_SOCKET;
struct sockaddr_in serv_addr;
char buffer[1024] = {0};
char filename[100] = {0};
FILE *fp;
int valread;
// 初始化 Winsock 库
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
printf("WSAStartup failed. Error Code : %d\n", WSAGetLastError());
return -1;
}
// 创建 socket 文件描述符
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
printf("Socket creation error. Error Code : %d\n", WSAGetLastError());
return -1;
}
// 初始化地址结构体
memset(&serv_addr, '0', sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
// 将 IP 地址从字符串转换为二进制格式
if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0)
{
printf("Invalid address/ Address not supported.\n");
return -1;
}
// 连接服务器
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
printf("Connection failed.\n");
return -1;
}
// 发送文件名
printf("Enter filename: ");
scanf("%s", filename);
send(sock, filename, strlen(filename), 0);
// 打开文件
fp = fopen(filename, "rb");
if (fp == NULL)
{
perror("fopen failed");
exit(EXIT_FAILURE);
}
// 发送文件内容
while (!feof(fp))
{
valread = fread(buffer, sizeof(char), sizeof(buffer), fp);
send(sock, buffer, valread, 0);
memset(buffer, 0, sizeof(buffer));
}
// 关闭文件和 socket
fclose(fp);
closesocket(sock);
// 清理 Winsock 库
WSACleanup();
return 0;
}
```
需要注意的是,在 Windows 环境下使用 Socket 编程需要先调用 `WSAStartup()` 函数来初始化 Winsock 库,并在程序结束时调用 `WSACleanup()` 函数来清理 Winsock 库。此外,Windows 下使用的是 `closesocket()` 函数来关闭 socket,而不是 `close()` 函数。
#include <stdio.h> #include <iostream> #include <chrono> #include <thread> #include <DjiRtspImageSource.h> #define STB_IMAGE_WRITE_IMPLEMENTATION #include "stb_image_write.h" static inline int64_t now() { return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count(); } static int write_data_to_file(const char* name, uint8_t* data, int size) { FILE* fd = fopen(name, "wb"); if(fd) { int w = (int)fwrite(data, 1, size, fd); fclose(fd); return w; } else { return -1; } } char rtsp_url = "rtsp://192.168.42.142:8554/live"; int main(int argc, char** argv) { if(argc < 1) return -1; if(argc == 1) { std::cout << "Usage : " << argv[0] << " <url>" << std::endl; return -1; } int64_t ts = now(); DjiRtspImageSource service(rtsp_url); service.setImageCallback(nullptr, [&ts](void* handler, uint8_t* frmdata, int frmsize, int width, int height, int pixfmt) -> void { printf("Image %d@%p -- %dx%d -- %d\n", frmsize, frmdata, width, height, pixfmt); if(frmdata) { int64_t t = now(); if(t - ts > 1000) { ts = t; char name[64]; static int counter = 0; sprintf(name, "pictures/%dx%d-%d_%d.jpg", width, height, pixfmt, ++counter); if(pixfmt == 5) stbi_write_jpg(name, width, height, 3, frmdata, 80); } } }); service.start(); for(;;) //for(int i=0; i<30; i++) { std::this_thread::sleep_for(std::chrono::milliseconds(1000)); } service.stop(); std::cout << "done." << std::endl; return 0; } 利用上述代码实现提取并解码二维码的信息,并将解码结果保存到tta文件夹下保存为文件名为 list_of_goods,给出c++源码
以下是使用 C++ 代码从图像中提取和解码二维码信息,并将解码结果保存到名为 "list_of_goods.txt" 的文件中:
```cpp
#include <stdio.h>
#include <iostream>
#include <chrono>
#include <thread>
#include <DjiRtspImageSource.h>
#include <zbar.h>
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"
using namespace std;
using namespace zbar;
static inline int64_t now()
{
return chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now().time_since_epoch()).count();
}
static int write_data_to_file(const char* name, uint8_t* data, int size)
{
FILE* fd = fopen(name, "wb");
if(fd)
{
int w = (int)fwrite(data, 1, size, fd);
fclose(fd);
return w;
}
else
{
return -1;
}
}
void save_qr_code_data(const char* data)
{
FILE* file = fopen("tta/list_of_goods.txt", "a");
if (file)
{
fprintf(file, "%s\n", data);
fclose(file);
}
}
char rtsp_url[] = "rtsp://192.168.42.142:8554/live";
int main(int argc, char** argv)
{
if(argc < 1) return -1;
if(argc == 1)
{
cout << "Usage : " << argv[0] << " <url>" << endl;
return -1;
}
int64_t ts = now();
DjiRtspImageSource service(rtsp_url);
service.setImageCallback(nullptr, [&ts](void* handler, uint8_t* frmdata, int frmsize, int width, int height, int pixfmt) -> void {
printf("Image %d@%p -- %dx%d -- %d\n", frmsize, frmdata, width, height, pixfmt);
if(frmdata)
{
int64_t t = now();
if(t - ts > 1000)
{
ts = t;
char name[64];
static int counter = 0;
sprintf(name, "pictures/%dx%d-%d_%d.jpg", width, height, pixfmt, ++counter);
if(pixfmt == 5)
{
stbi_write_jpg(name, width, height, 3, frmdata, 80);
// Decode QR code
ImageScanner scanner;
scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
Image image(width, height, "Y800", frmdata, width * height);
int n = scanner.scan(image);
for (Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol)
{
cout << "QR code data: " << symbol->get_data() << endl;
save_qr_code_data(symbol->get_data().c_str());
}
}
}
}
});
service.start();
for(;;)
//for(int i=0; i<30; i++)
{
this_thread::sleep_for(chrono::milliseconds(1000));
}
service.stop();
cout << "done." << endl;
return 0;
}
```
注意,上述代码使用了 `zbar` 库来进行二维码解码。确保在编译和运行之前已经安装了该库,并根据需要修改保存文件的路径。同时,需要确保 "tta" 文件夹已经存在,以便保存解码结果。