Переименовать переменную char в C в цикле for - PullRequest
0 голосов
/ 09 июля 2020

Я новичок в C, я потратил много времени на решение своей проблемы и не могу найти решение.

Я хочу обновить имя файла filename_2 (char ) с использованием имени файла_1 в качестве префикса для l oop в C.

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

Здесь это мой код и то, что я ищу сразу после этого.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    int j;
    char filename_1[40]="test";
    char nummbr[40];
    char *filename_2 = NULL;
    filename_2 = filename_1;
    
    
    for( j = 0; j<12; j++)
    {

        sprintf(nummbr, "%d", j); // transform int into char --> for concatenation
        
        if (j < 21){            
            strcat(filename_2, "_00");
            strcat(filename_2, nummbr);
        }else{
            strcat(filename_2, "_0");
            strcat(filename_2, nummbr);
        }  

        /* do things with the file */
        printf("member: %i %s\n",j, filename_2);
       
    }
    return 0;
}

У меня следующий результат:

member: 0 test_pr_fc_000
member: 1 test_pr_fc_000_001
...
member: 10 test_pr_fc_000_001_002_003 ..._010
..

Я хочу:

member: 0 test_000
member: 1 test_001
...
member: 20 test_020

1 Ответ

1 голос
/ 09 июля 2020

Вы продолжаете добавлять к filename_2 (который указывает на filename_1) на каждой итерации l oop без сброса, поэтому каждая итерация просто добавляется к тексту предыдущей.

Во-первых, сделать filename_2 массив вместо указателя. Затем начинайте каждую итерацию, используя strcpy, чтобы скопировать filename_1 в начало filename_2.

char filename_2[40];

for( j = 0; j<12; j++)
{
    strcpy(filename_2, filename_1);
    ...

Кроме того, это:

if (j < 21){

Вероятно, должно быть:

if (j < 10){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...