String 将字符字符串分配给字符数组时出现问题
我已经阅读了所有关于我的问题的答案。然而,我不是一个非常聪明的程序员,我无法掌握它。有人能调查一下我的问题吗 我正在尝试使用2D数组中的条目编写CSV文件。字符串.h已包含在main()中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的第一个参数传递可能是一场灾难,尽管编
每次编写
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