如何解决添加两个变量以创建目录路径
我想连接 "/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 新手,请帮助我了解如何操作。
提前致谢。
解决方法
strcat
将使用第一个参数作为目的地。您所做的是错误的,因为您将字符串文字 ("/sdcard"
) 指定为目标。
由于您使用的是 ESP API,我假设您想继续使用 C'ish 编程并避免使用 STL 和朋友,因此可以解决问题的最少代码涉及 printing into a buffer:
#define BUFFER_SIZE 100
{
// Remove this line:
// const char *file_hello = strcat(MOUNT_POINT,file_path);
char buf[BUFFER_SIZE];
snprintf(buf,BUFFER_SIZE,"%s%s",MOUNT_POINT,file_path);
// buf now holds the concatenated strings :)
ESP_LOGI(TAG,"Opening file %s",buf);
FILE* f = fopen(buf,"w");
}
当然如果你可以使用标准库,问题毕竟被标记为C++,你可以简单地做:
#include <string>
const string MOUNT_POINT{"/sdcard"};
{
auto file_hello = MOUNT_POINT + file_path;
// The rest is similar,use `.c_str()` to pass a C string e.g.
FILE *f = fopen(file_hello.c_str(),"w");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。