我目前在此代码块中收到标题错误。
void Option_3(char filename)
{ // profit for a month
FILE *ptr_file;
int num1, num2, num3;
int a[31],b[31],c[31];
int count=0;
int i;
ptr_file = fopen ( filename ,"r"); // error is here at file name
以后的主要
void main()
{
int select;
char filename;
select = 0 ;
filename = "April.txt"; //here the equals sign is giving me the error.
答案 0 :(得分:2)
您需要将其声明为char *
:
void main()
{
int select;
char *filename; // Note the declaration
select = 0 ;
filename = "April.txt";
在Option_3
的参数声明中更改它:
void Option_3(char *filename)
原因是将其声明为char
意味着您拥有一个变量来保存char
类型的对象。 C中的字符序列是以'\0'
结尾的字符数组,因此char *
是正确的类型。
更新:更合适的是将其声明为const char *
,因为您无法修改字符串文字。
答案 1 :(得分:2)
在C中,char
类型与类型char *
不兼容。仅仅因为它们是不同类型的。根据定义,char
保证是最小的类型(大小为1)。 char *
具有与任何指针相同的大小:它必须足够大以容纳内存地址:通常在32位系统上为4,在64位上为8。
您正在为声明为char
的变量分配字符串常量,该赋值期望右侧参数类似于:
char foo = 'a';//single quotes indicate a char
或者,或许更多你的想法:
const char *foo = "April.txt";//double quotes indicative of char *
注意const
存储类:字符串常量不会分配给变量,而filename
的值将是字符串的内存地址,存储在读取中只有内存。因此,它是const
:你不能改变它:
const char *foo = "foobar";
foo[0] = 'F';//<-- ERROR
为了能够修改该值,请写:
char foo[] = "foobar";
foo[0] = 'F';//Success!
这将创建一个足以容纳字符串的数组,并复制字符。当然,如果var的值可能会发生变化,那么它可能足够大以容纳更大的字符串,在这种情况下:
char foo[100] = "up to 100 chars";
strcat(foo, "!!");
或者,使用动态内存(但如果可能的话,请避免,因为堆慢,需要您更多关注):
char *foo = malloc(20);//begin with 20 chars
if (foo == NULL)
exit( EXIT_FAILURE);//no memory could be allocated
strcpy(foo, "foobar");//copy string value into allocated memory
foo = realloc(foo, 50);//increase amount of allocated memory to hold 50
if (foo == NULL)//safety first:
exit(EXIT_FAILURE);
strncat(foo, "some huuuuuuge string", 30);//strncat for safety, again
嗯,根据您的具体需求,有多种方法可以做事