我可以传递给fopen的是什么?

时间:2016-08-17 15:22:56

标签: c

我可以将字符数组传递给fopen吗?例如:

    fopen(s, "r");

其中s被声明为字符数组并且以null结尾。

3 个答案:

答案 0 :(得分:2)

vector必须是指向空终止字符数组的指针。enter image description here

man pages确认此

conditions = []
results = Client.order(:name)
results = results.where(visible: true)
conditions << "category_id: #{category_id}" if category_id.present?
conditions << "region_id: #{region_id}" if region_id.present?
conditions << "pricerange1: #{pricerange1}" if pricerange1.present?
conditions << "pricerange2: #{pricerange2}" if pricerange2.present?
conditions << "pricerange3: #{pricerange3}" if pricerange3.present?
conditions << "pricerange4: #{pricerange4}" if pricerange4.present?
conditions << "pricerange5: #{pricerange5}" if pricerange5.present?
final_conditions = conditions.join(" and ")
results = results.where(final_conditions)

您可以看到它必须以null结尾,因为没有给出s参数。

答案 1 :(得分:1)

fopen()的签名是:

FILE * fopen ( const char * filename, const char * mode );

因此filename参数必须是有效的C字符串。就是这样。

答案 2 :(得分:0)

C11标准中指定的fopen的确切签名是:

FILE *fopen(const char * restrict filename, const char * restrict mode);

filenamemode都只是指向char又名C字符串)的空终止数组的指针。

restrict关键字的存在似乎表明字符串不应重叠,这没有多大意义,因为它们都是const限定的。

char数组传递给fopen时,会传递指向其第一个元素的指针。此步骤称为数组衰减为指针。每当在表达式中使用数组时都会发生相同的情况,除了作为sizeof的参数。