【发布时间】:2020-06-07 17:00:00
【问题描述】:
我正在接受用户的输入以继续我的程序。在我尝试将字符串输入到二维数组 cityName 之前,一切都运行得很好。一旦我输入字符串,程序就会崩溃。
//dynamically allocate memory for user input (integers)
int *xOfCity = calloc(numOfCities, sizeof(int));
int *yOfCity = calloc(numOfCities, sizeof(int));
//dynamically allocate memory for user input (city names)
char **cityName = (char **) calloc(numOfCities, sizeof(char *));
for (int i = 0; i < numOfCities; i++)
cityName[i] = (char *) calloc(CITY_NAME + 1, sizeof(char));
int dxOfFront, dyOfFront;
//read in data from user
for (int i = 0; i < numOfCities; i++) {
scanf("%d", &xOfCity[i]);
if (xOfCity[i] > MAX_GRAPH || xOfCity[i] < MIN_GRAPH)
return ERROR;
scanf("%d", &yOfCity[i]);
if (yOfCity[i] > MAX_GRAPH || yOfCity[i] < MIN_GRAPH)
return ERROR;
for (int j = 0; j < CITY_NAME; j++)
scanf("%s", cityName[i][j]);
}
为了确保二维数组是问题,我将其注释掉并运行程序,只将整数作为输入,并且程序运行良好。我尝试以不同的方式分配数组,但这似乎也不起作用。
为什么我的程序在输入字符串时会崩溃?
【问题讨论】:
-
cityName[i][j]是char。%s需要char*。你的编译器应该警告你,所以如果没有,你应该看看如何在你的编译器上启用警告。 (另外,scanf("%s")很难正确使用;考虑一下fgets。) -
不用这么乱,只需使用
struct city { int x; int y; char name[CITY_NAME + 1]; },您就没有任何这些问题。
标签: c multidimensional-array dynamic-memory-allocation