2015-07-15 5 views
-4

Я пытаюсь получить и сохранить данные из файла .ini в массив в моей программе main. Чтобы убедиться, что данные действительно сохранены, я также распечатываю их (и они кажутся правильными). Однако каждый раз, когда я запускаю основную программу, она запускается, а затем появляется всплывающее окно, в котором говорится, что файл .exe перестает работать. Может кто-нибудь взглянуть и рассказать мне, что случилось.Почему программа C (.exe) перестает работать?

.ini файл: программа

[key] 
title= A,H,D 

C:

var[100]; 
LPCSTR ini="C:\conf.ini"; 
GetPrivateProfileString("key", "title", 0, var, 100,ini); 
int i=0; 
char* arr[10]; 
char* buffer; 
for(buffer=strtok(var, ",");buffer;buffer=strtok(NULL, ",")) 
{ 
    if (buffer !=NULL) 
    { 
     puts("") 
     strcpy(arr[i], buffer); 
     printf("the value is %S \n", arr[i]); 
     i++; 
    } 
} 
printf("first value %s", arr[0]); 
printf("second value %s", arr[1]); 
printf("third value %s", arr[2]); 

Выход я получаю выглядит следующим образом:

The value is A 

    The value is H 

    The value is D 
    first value A 
    second value H 
    third value D 
+4

для чего-то этого маленького нет причин не публиковать весь код .. – amdixon

+3

'' C: \ conf.ini "' -> '" C: \\ conf.ini "'. также 'if (buffer! = NULL)' Это избыточно. – BLUEPIXY

ответ

4

Предполагая, что опечатка в закрытии ], и хранение что отдельно,

strcpy(arr[i], buffer]; 

arr[i] неинициализирован здесь. Пытаться записать в неинициализированную память вызывает undefined behaviour.

Прежде чем использовать arr[i], вам необходимо выделить память. Вы можете посмотреть malloc() и семейство функций для распределения динамической памяти.

FWIW, вы можете также взглянуть на free().

+1

спасибо за это :). Это было именно то, что мне нужно. –

+0

или просто объявить его как 2-мерный массив со статическим размером, вы объявляете var размером 100 только так, чтобы это был правильный минимальный размер для внутреннего arr. – LeleDumbo

Смежные вопросы