2
Error: Unhandled exception at 0x60092A8D (msvcr110d.dll) in C_Son60.exe: 0xC0000005: Access violation writing location 0xCCCCCCCC.

当执行以下代码时,会给出此错误代码。(编译成功)我的错误在哪里?

#include <stdio.h>

int i;

int main(void){

char *names[3];

//get the names of the cities
puts("Enter names of cities");
for (i = 0; i < 3; i++)
{
    fgets( names[i], 99, stdin);
}
//print entered names
for (i = 0; i < 3; i++)
{
    printf("%s", *names[i]);
}

getch();
}
4

3 回答 3

4

您需要在读取它们之前分配 char 指针指向的内存

例如:

for (i = 0; i < 3; i++)
{
  names[i] = malloc(200);
  fgets( names[i], 99, stdin);
}
于 2013-09-17T12:11:38.277 回答
2

2件事:

  1. 您需要分配您创建的字符串-您可以使用malloc(100 * sizeof(char))
  2. 打印时你这样做*names[i]意味着 - **(names + i)

所有你需要的是names[i]

使用代码:

#include <stdio.h>

int i;

int main(void){
    char *names[3];

    //get the names of the cities
    puts("Enter names of cities");
    for (i = 0; i < 3; i++)
    {
        names[i] = (char *)malloc(100 * sizeof(char));
        fgets( names[i], 99, stdin);
    }
    //print entered names
    for (i = 0; i < 3; i++)
    {
        printf("%s", names[i]);
    }

    getch();
}
于 2013-09-17T12:12:40.767 回答
1

在将任何内容存储到其中之前,您必须分配内存。当你需要分配一个数组元素,而你在编译时不知道元素个数时,你必须使用它malloc()来分配它们。

以后不要忘记free动态分配内存以避免内存泄漏!

于 2013-09-17T12:11:40.250 回答