Я попробовал следующую адаптацию вашего кода на Mac Mini под управлением Lion (10.7.1) с XCode 4.
#include <stdio.h>
static void print(const char *tag, const char *str)
{
printf("%8s: <<%s>>\n", tag, str);
}
int main(void)
{
FILE *pFile = fopen("excelData.csv","r");
char name[256], country[256], last[256], first[256], photoURI[256];
while (fscanf(pFile, "%[^,],%[^,],%[^,],%[^,],%[^\n]%*c",
name, country, last, first, photoURI) == 5)
{
print("name", name);
print("country", country);
print("last", last);
print("first", first);
print("photoURI", photoURI);
}
return 0;
}
Я создал 64-битный двоичный файл, используя:
gcc -O -std=c99 -Wall -Wextra xxx.c -o xxx
Не было никаких предупреждений. С учетом входных данных:
Monster,United States,Smith,John,http://www.example.com/photo1
Emancipated Majority,Canada,Jones,Alan,http://www.example.com/photo2
A Much Longer Name Than Any Before,A Land from Far Away and In the Imagination Most Beautiful,OneOfTheLongerFamilyNamesYou'llEverSee,ALongishGivenName,http://www.example.com/photo3/elephant/pygmalion/photo3,x31
Производит вывод:
name: <<Monster>>
country: <<United States>>
last: <<Smith>>
first: <<John>>
photoURI: <<http://www.example.com/photo1>>
name: <<Emancipated Majority>>
country: <<Canada>>
last: <<Jones>>
first: <<Alan>>
photoURI: <<http://www.example.com/photo2>>
name: <<A Much Longer Name Than Any Before>>
country: <<A Land from Far Away and In the Imagination Most Beautiful>>
last: <<OneOfTheLongerFamilyNamesYou'llEverSee>>
first: <<ALongishGivenName>>
photoURI: <<http://www.example.com/photo3/elephant/pygmalion/photo3,x31>>
Изменение != EOF
против == 5
не имеет значения для данных выборки, но, возможно, в целом более устойчиво. Последняя строка данных использует ваше изменение шаблона и содержит запятую в «последнем поле».
Поскольку ваш код не проверяет, правильно ли был открыт файл, я должен задаться вопросом, является ли это вашей проблемой, хотя это скорее приведет к нарушению сегментации, чем к ошибке шины.
Итак, нет ответа на вашу проблему - но какой-то код для вас.