微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

添加两个变量以创建目录路径

如何解决添加两个变量以创建目录路径

我想连接 "/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 举报,一经查实,本站将立刻删除。