C语言急!! 想把一个CSV文件的一行数据读取出来 并把它赋值给一个变量(也就是代码中的PASSWORD)但是提示不能赋给
问题描述:
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include<conio.h>
int main(){
char PASSWORD[100];
FILE *fp = NULL;
char *line,*record;
char buffer[1024];
if((fp = fopen("transaction.csv", "r")) != NULL)
{
fseek(fp, 0L, SEEK_SET);
char delims[] = ",";
char *result = NULL;
int j = 0;
while ((line = fgets(buffer, sizeof(buffer), fp))!=NULL)
{
record = strtok(buffer, ",");
while (record != NULL)
{
if (strcmp(record, "Ps") == 0)
PASSWORD= *record;
if (j == 9)
break;
record = strtok(NULL, ",");
j++;
}
j = 0;
}
fclose(fp);
fp = NULL;
}
printf("%s",PASSWORD);
return 0;
}
答
类型都不一样,自然不能赋值
你把 PASSWORD= record;中的拿掉试试
答
你的字符串赋值思路完全不对,是典型的缺乏对指针理解的错误。
太长不看版答案:27行,改为strcpy(PASSWORD, record)。
========
你的PASSWORD是char数组,数组虽然可以隐式转化为指针,但本质上仍和指针是完全不同的类型,当然不能混用。这里你要明白一个非常重要的语义:数组和数组内容,是完全不同的东西。看起来你想做的是给PASSWORD数组内容赋值,但是PASSWORD=*record的PASSWORD不具有数组内容的语义,只具有数组地址的语义。简单来讲,数组名永远只具有数组地址的语义,永远不会具有数组内容的语义。原生(primitive)指针(与之相对的则是C++的智能指针)可以重新赋值,但原生数组的地址可以重新赋值吗?显然不能。没有任何教材有重新赋值数组地址的做法,因为这根本不是C语法的一部分(C++原生数组也做不到这种操作)。要给数组内容赋值,C中只有两个办法:给数组中的每个元素依次赋值,或者通过底层硬件指令复制源数据。strcpy就是其中一种方法的封装而已。
简而言之:C中不存在直接给数组内容赋值的方法。