我可以将字符数组传递给fopen
吗?例如:
fopen(s, "r");
其中s
被声明为字符数组并且以null结尾。
答案 0 :(得分:2)
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);
filename
和mode
都只是指向char
(又名C字符串)的空终止数组的指针。
restrict
关键字的存在似乎表明字符串不应重叠,这没有多大意义,因为它们都是const
限定的。
将char
数组传递给fopen
时,会传递指向其第一个元素的指针。此步骤称为数组衰减为指针。每当在表达式中使用数组时都会发生相同的情况,除了作为sizeof
的参数。