fgets“访问冲突写入位置0xCCCCCCCC”。错误

时间:2013-09-17 12:09:16

标签: c fgets

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();
}

3 个答案:

答案 0 :(得分:4)

中读取char指针之前,需要分配char指针所指向的内存

例如:

for (i = 0; i < 3; i++)
{
  names[i] = malloc(200);
  fgets( names[i], 99, stdin);
}

答案 1 :(得分:2)

2件事:

  1. 您需要分配您创建的字符串 - 您可以使用malloc(100 * sizeof(char))
  2. 进行分配
  3. 打印时,您执行*names[i],即**(names + i)
  4. 您需要的只是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();
    }
    

答案 2 :(得分:1)

在将任何内容存入其中之前,您必须分配内存。当您需要分配元素数组,并且在编译时不知道元素的数量时,必须使用malloc()来分配它们。

为了避免内存泄漏,请不要忘记稍后free动态分配的内存!