【问题标题】:Problems assigning char string to char array将 char 字符串分配给 char 数组的问题
【发布时间】:2014-06-08 23:14:13
【问题描述】:

我已经阅读了有关我的问题的所有先前答案。但是,我不是一个非常聪明的编码员,无法掌握它。有人可以看看我的问题。

我正在尝试使用二维数组中的条目编写 CSV 文件。 string.h 已经包含在 main() 中。

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

【问题讨论】:

    标签: string dev-c++ arrays incompatibletypeerror


    【解决方案1】:

    每次编写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" 和终止空字符)。

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

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      相关资源
      最近更新 更多