Добавление значений в char * var из текстового файла

0

Пример файла:

[16bpp] Ponete el cinturon *-*
arfield
Nothing (cumpleanios):
Alkon^
~~|Tampon)
[16bpp] Chico Tonto.
Budin
16bpp] Leooooooooo!!!!!
Ev
16bpp] fedee
etamod
:) mAnKeAno

Я хочу, чтобы каждое имя находилось на другой позиции...

Я пробовал этот код:

int c;
FILE *file;
file = fopen("bots.txt", "r");
if (file){
    char *buffer;
    char *jugadores = new char[1000];
    int p;
    int pos;
    while ((c = getc(file)) != EOF){
        if (c == '\n'){
            strcpy(jugadores[p], buffer);
            p++;
            buffer = "";
            pos = 0;
        } else {
            buffer[pos] = c;
            pos++;
        }
    }
    fclose(file);
}

Но он даже не компилирует...

В php правильный код будет примерно таким:

$data = file_get_contents("file.txt");
$names = explode("\n", $data);
  • 0
    а) Итак, вы хотите массив строк, по одной строке на строку файла? б) Но он даже не компилируется - хорошо, дайте нам сообщение об ошибке. Это отчасти важно!
  • 0
    Какие ошибки вы получаете?
Показать ещё 2 комментария
Теги:
file-io

1 ответ

1
Лучший ответ

У вашего кода есть несколько недостатков. Вместо этого вам нужно что-то большее:

FILE *file = fopen("bots.txt", "r");
if (file)
{
    char** lines = new char*[1000];
    int maxlines = 1000;
    int numlines = 0;

    char *buffer = new char[1024];
    int maxbuf = 1024;
    int buflen = 0;

    char *line;

    int c;
    while ((c = getc(file)) != EOF)
    {
        if (c == '\n')
        {
            if (numlines == maxlines)
            {
                char** tmplines = new char*[maxlines+1000];
                memcpy(tmplines, lines, sizeof(char*)*maxlines);
                delete[] lines;
                lines = tmplines;
                maxlines += 1000;
            }

            line = new char[buflen+1];
            memcpy(line, buffer, sizeof(char)*buflen);
            line[buflen] = 0;

            lines[numlines] = line
            numlines++;

            buflen = 0;
        }
        else
        {
            if (buflen == maxbuf)
            {
                char* tmpbuf = new char[maxbuf+1024];
                memcpy(tmpbuf, buffer, sizeof(char)*maxbuf);
                delete[] buffer;
                buffer = tmpbuf;
                maxbuf += 1024;
            }

            buffer[buflen] = c;
            buflen++;
        }
    }
    fclose(file);

    if (buflen > 0)
    {
        if (numlines == maxlines)
        {
            char** tmplines = new char*[maxlines+1000];
            memcpy(tmplines, lines, sizeof(char*)*maxlines);
            delete[] lines;
            lines = tmplines;
            maxlines += 1000;
        }

        line = new char[buflen+1];
        memcpy(line, buffer, sizeof(char)*buflen);
        line[buflen] = 0;

        lines[numlines] = line
        numlines++;
    }

    delete[] buffer;

    // use lines up to numlines elements as needed...
    for (int i = 0; i < numlines; i++)
        printf("%s\n", lines[i]);

    for (int i = 0; i < numlines; ++i)
        delete[] lines[i];
    delete[] lines; 
}

С учетом сказанного, поскольку вы используете C++, вы должны использовать классы C++, которые помогут вам справиться со всем. Вместо этого попробуйте что-то большее:

#include <fstream> 
#include <ostream> 
#include <string>
#include <vector>

std::ifstream file("bots.txt");
if (file.is_open())
{
    std::string line;
    std::vector<std::string> lines;
    while (std::getline(file, line))
        lines.push_back(line);
    file.close();

    // use lines as needed...
    for (int i = 0; i < lines.size(); i++)
        std::cout << lines[i] << std::endl;
}
  • 0
    Я попробовал ваш код C ++ clases, но мое приложение вылетает после отображения первой строки ...
  • 0
    Как вы показываете линию точно? Пожалуйста, покажите этот код.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню