String 将字符字符串分配给字符数组时出现问题

String 将字符字符串分配给字符数组时出现问题,string,dev-c++,arrays,incompatibletypeerror,String,Dev C++,Arrays,Incompatibletypeerror,我已经阅读了所有关于我的问题的答案。然而,我不是一个非常聪明的程序员,我无法掌握它。有人能调查一下我的问题吗 我正在尝试使用2D数组中的条目编写CSV文件。字符串.h已包含在main()中 每次编写str1=,您都在告诉编译器更改str1,以便它指向内存中位于=符号右侧的任何位置。但是您声明了char str1[100],这意味着解释为指针的str1,只能指向该声明所分配的100个字符块的起始位置。所以写str1=是没有意义的 将C字符串常量作为strcat的第一个参数传递可能是一场灾难,尽管编

我已经阅读了所有关于我的问题的答案。然而,我不是一个非常聪明的程序员,我无法掌握它。有人能调查一下我的问题吗

我正在尝试使用2D数组中的条目编写CSV文件。字符串.h已包含在main()中


每次编写
str1=
,您都在告诉编译器更改
str1
,以便它指向内存中位于
=
符号右侧的任何位置。但是您声明了
char str1[100]
,这意味着解释为指针的
str1
,只能指向该声明所分配的100个字符块的起始位置。所以写
str1=
是没有意义的

将C字符串常量作为strcat的第一个参数传递可能是一场灾难,尽管编译器似乎并不介意。
strcat
的第一个参数应该是一个足够大的字符缓冲区,以容纳连接结果。为了将某些内容连接到常量字符串的末尾,可以分配足够大的缓冲区,然后将常量字符串复制到该缓冲区,然后调用
strcat

一般来说,您可能不需要使用
strcat
的返回值就可以执行任何需要执行的操作,也就是说,不需要在
=
的右侧写入
strcat

建议使用
fgets
而不是
gets
,因为这样可以防止您获得太多输入而无法放入分配的字符缓冲区。如果在最大缓冲区中分配100个字符,则只能接受95个字符减去字符串长度
“C:\\Users\\Neil\\Documents\\Trust CSV Logs\\”
。(其他5个字符需要容纳字符串
“.csv”
和终止的空字符)

我还看到您声明了
str2
str3
,但我没有看到您在哪里使用了它们。看起来您不需要两者,但您可能会发现使用
str2
作为最后一次串接字符串的缓冲区很方便

void create_marks_csv(int rout[][20],float p[][20],float c[][20],int n)
{
    system("cls");
    char str1[100],str2[100],str3[100];
    printf("\nEnter filename for routing matrix: ");
    gets(str1);
    printf("\n Creating %s.csv file",str1);
    FILE *fp;
    int i,j;
    str1=strcat(str1,".csv");
    str1=strcat("C:\\Users\\Neil\\Documents\\Trust CSV Logs\\",str1) ;
    fp=fopen(str1,"w+");
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            if(i==j)
                fprintf(fp,"X");
            else
                fprintf(fp,"%d",rout[i][j]);
        }
        fprintf(fp,"\n");
    }
    fclose(fp);
    printf("\nFile created: %s",str1);
    system("cls");
}
5   20  C:\Users\Neil\Documents\main.c  [Warning] extra tokens at end of #include directive [enabled by default]
C:\Users\Neil\Documents\main.c  In function 'create_marks_csv':
168   6 C:\Users\Neil\Documents\main.c  [Error] incompatible types when assigning to type 'char[100]' from type 'char *'
169   6 C:\Users\Neil\Documents\main.c  [Error] incompatible types when assigning to type 'char[100]' from type 'char *'
28      C:\Users\Neil\Documents\Makefile.win    recipe for target 'main.o' failed