【发布时间】:2023-04-09 01:14:01
【问题描述】:
我想连接"/sdcard/hello.txt" 的目录路径,但我的问题是前半部分(/sdcard)在#define format 中定义,第二部分是const char *file_path("/hello.txt"),这是我从用户那里获取的。
因此,要创建完整路径,我必须将这两部分连接起来以创建目录的完整路径。
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define MOUNT_POINT "/sd_card"
using namespace std;
class SD_Card {
public:
void sd_card_init(void);
void create_and_writeFile(const char* file_path);
};
void SD_Card::create_and_writeFile(const char* file_path) {
// First create a file.
//const char *file_hello = MOUNT_POINT"/hello.txt";
const char* file_hello = strcat(MOUNT_POINT, file_path);
ESP_LOGI(TAG, "Opening file %s", file_hello);
FILE* f = fopen(file_hello, "w");
if (f == NULL) {
ESP_LOGE(TAG, "Failed to open file for writing");
return;
}
fprintf(f, "Hello %s!\n", card->cid.name);
fclose(f);
ESP_LOGI(TAG, "File written");
}
void app_main() {
SD_Card cObj;
cObj.create_and_writeFile("/hello.txt");
}
我收到此错误:
/main/SD_Card.cpp: In member function 'void SD_Card::create_and_writeFile(const char*)':
../main/SD_Card.cpp:144:63: warning: ISO C++ forbids converting a string constant to 'char*'
[-Wwrite-strings]
const char *file_hello = strcat(MOUNT_POINT,file_path);
我是 CPP 的新手,请帮助我了解如何操作。
提前致谢。
【问题讨论】:
-
如果您有 C++ 编译器,请使用 C++ STL
fstream和string。 -
strcat将修改第一个参数并将第二个参数的内容放入第一个参数的内存中。但是您将不可修改的字符串文字作为第一个参数传递,因此编译器(正确地)抱怨。用std::string代替C函数确实会简单很多。 -
感谢您的回复,能否请您分享一些示例代码,我已尝试但无法正常工作。
-
几年以来,我们在 C++ 中有一个
filesystem库。请参阅此处:en.cppreference.com/w/cpp/filesystem 您需要的一切都已经存在。如果你阅读 cppreference,你会发现很多例子。
标签: c++ string pointers char constants