Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “将'char'赋值给'char'[100]时不兼容类型”我使用strcat对吗?_C++_Arrays_Char_Fwrite_Strcat - Fatal编程技术网

C++ “将'char'赋值给'char'[100]时不兼容类型”我使用strcat对吗?

C++ “将'char'赋值给'char'[100]时不兼容类型”我使用strcat对吗?,c++,arrays,char,fwrite,strcat,C++,Arrays,Char,Fwrite,Strcat,你好 我正在为我的IMU编写一个数据记录程序。我想在记录的每个值之后添加一个换行符,但是,我一直在这一行上得到一个错误: strcat(file_DT,"\n"); 该错误表示在“char”到“char”的赋值中存在不兼容的类型[100] 我试着用 file_DT+="\n"; 但事实证明它只对字符串有效 我找不到任何解决我困境的办法。有更好的方法吗?非常感谢您的帮助: float deltaTime2; FILE *fileDT; char file_DT[100]; const cha

你好

我正在为我的IMU编写一个数据记录程序。我想在记录的每个值之后添加一个换行符,但是,我一直在这一行上得到一个错误:

strcat(file_DT,"\n");
该错误表示在“char”到“char”的赋值中存在不兼容的类型[100]

我试着用

file_DT+="\n"; 
但事实证明它只对字符串有效

我找不到任何解决我困境的办法。有更好的方法吗?非常感谢您的帮助:

float deltaTime2;
FILE *fileDT;
char file_DT[100];
const char *filenameDT = "dT.txt";

while(1){

    /* do quadcopter orentation sampling here */

// log DT
fileDT = fopen(filenameDT, "a+");
    if (fileDT){ //if file exists
        snprintf(file_DT, 100, "%f", deltaTime2);
        strcat(file_DT,"\n");
        fwrite(&file_DT[0], sizeof(char), 100, fileDT);
        cout << "Logging DT" << << endl;
        fclose(fileDT);
        fileDT = NULL;
    }
    else{ //no file, generate file
        cout << "No file present, generating new fileDT" <<     endl;
        snprintf(file_DT, 100, "%f", deltaTime2);
        strcat(file_DT,"\n");
        fwrite(&file_DT[0], sizeof(char), 100, fileDT);
        fclose(fileDT);
        fileDT = NULL;
    }

}

一个最小的改动可以重写以下几行

    snprintf(file_DT, 100, "%f", deltaTime2);
    strcat(file_DT,"\n");
    fwrite(&file_DT[0], sizeof(char), 100, fileDT);
作为

这样,您就可以得到换行符并只写入所需的数据。
否则,您最终会将垃圾写入文件。如果我建议这种代码最好用C编写,那么您的行可能会短于100字节++

#include <iostream>
#include <fstream>
#include <string>
using namspace std;

const string filenameDT;

int main()
{
    ofstream file(filenameDT);
    file << deltaTime2 << endl;
    cout << "Logging DT" << endl;        
}

我们在2016年!不要那样写代码

作为旁注,命名两个变量file_DT和fileDT是非常混乱的。我怀疑你在那一行中得到了错误,因为里面没有赋值的暗示。与您的问题无关:您不需要strcat,只需在编写完文件后写一行新行即可。更好的方法是:使用std::of stream fileDT和fileDT或fprintffile_DT,%f\n,deltaTime2;,如果你决定用C++写C,那么在这里使用Strut有什么意义呢?您最好使用%f而不是%f调用snprintf\n。此外,您正在向文件中写入一大堆零。为什么不使用fprintf只写入实际数据?事实上,您可以使用fprintf来完成整个过程,而不是snprintf、strcat和fwrite的奇怪组合。如果想利用C++的好处,那么就有合适的内置STL函数。1,IMU到底是什么意思?2个Strut不能正确使用,因为它不是C++中的合适解决方案。写垃圾实际上是未定义的行为,它将未初始化的变量传递给库函数,所以任何事情都可能发生。
#include <iostream>
#include <fstream>
#include <string>
using namspace std;

const string filenameDT;

int main()
{
    ofstream file(filenameDT);
    file << deltaTime2 << endl;
    cout << "Logging DT" << endl;        
}