C++ 写入SD卡arduino

C++ 写入SD卡arduino,c++,c,arduino,sd-card,C++,C,Arduino,Sd Card,我的Arduino有些问题。我正在尝试为我的文件创建一个动态名称,并将其转换为char数组,就像我在本网站的一些帖子中看到的那样 下面是我如何编写函数的: void writeSD() { DateTime dt = RTC.now(); String temp = "DIVE"; temp += dt.day(); temp += dt.month(); temp += dt.year(); temp += ".txt"; Serial.println(tem

我的Arduino有些问题。我正在尝试为我的文件创建一个动态名称,并将其转换为char数组,就像我在本网站的一些帖子中看到的那样

下面是我如何编写函数的:

void writeSD()
{ 
  DateTime dt = RTC.now();

  String temp = "DIVE";
  temp += dt.day();
  temp += dt.month();
  temp += dt.year();
  temp += ".txt";

  Serial.println(temp);

  char filename[temp.length()+1];
  temp.toCharArray(filename, sizeof(filename));
  myFile = SD.open(filename, FILE_WRITE);  

  if (myFile) {
    Serial.print("Writing to txt file...");
    myFile.print(dt.day(), DEC);
    myFile.print('-');
    myFile.print(dt.month(), DEC);
    myFile.print('-');
    myFile.print(dt.year(), DEC);
    myFile.print(' ');
    myFile.print(dt.hour(), DEC);
    myFile.print(':');
    myFile.print(dt.minute(), DEC);
    myFile.print(':');
    myFile.print(dt.second(), DEC);
    myFile.println();
    myFile.close();
    Serial.println("done.");
  } else {
    Serial.println("error opening txt file");
  }
}

我只有
“打开txt文件时出错”
,我不知道为什么。我的文件名是正确的,在控制台上打印时显示如下:
dive65214.TXT

当我从Adafruit更准确地阅读有关SD断接板的文档时,我明白了为什么这不起作用:

SD卡库不支持像我们这样的“长文件名” 曾经相反,它使用8.3格式作为文件名,所以保留文件名 名字短!例如IMAGE.JPG很好,而datalog.txt很好 “我的GPS日志文件.text”不是

所以我有10个字符,但它只接受文件名中的8个字符


谢谢你试着帮助我!:)

我不确定这是否是问题的原因,但您从未真正NUL terminate
filename
。如果编译器没有自动将数组初始化为全零,那么
SD.open()
调用将看到文件名,后面是内存中出现的任何垃圾。您可以打印
temp
,而不是
filename
。请尝试打印
filename
,以检查字符串的字符数组表示形式是否符合预期。您还应该按照Andrew的建议执行:
filename[temp.length()]='\0'当我打印文件名时,我得到与临时值完全相同的内容。我尝试了
文件名[temp.length()]='\0'但我得到一个错误
错误:可变大小的对象“filename”可能未初始化