Манипулировать указателем char внутри функции и возвращать Вашу последнюю измененную стоимость (C)

Хороший то, что он перемещает, является следующим, я не могу добиваться, что функция validaLinea возвратила цепь со словом меньше, что она установлена и всегда эта в начале char, то, что я делаю, состоит в том, чтобы кружить string, копировать все то, что я должен доставать, и это вновь кружить, внутри функции это функционирует, но использовав return и вернувшись в main когда я это печатаю, это не та же стоимость.

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

struct estructura {         
    char linea[256];
    int cant;
};

void cargaLinea(char *, int *);     
char validaLinea(char *, int);         

int main() {
    int i;
    struct estructura directorios[3], aux;
    int cantlinea;  
    char linea[256], *lineab[256], lineac;

    lineab[256] = &linea[256];

    cargaLinea(&linea[256], &cantlinea);
    cantlinea = cantlinea - 5;

    linea[256] = validaLinea(lineab[256], cantlinea);  

    printf("La cadena despues de validar: %s \n", &linea[256]); 
}

void cargaLinea(char *l, int *cl) {  
    int cont, i;

    printf("Ingrese directorio a crear: ");
    gets(l);

    for (i=0; l[i] != '\0'; i++)
        cont = cont + 1;
    *cl = cont;
}


char validaLinea(char *l, int cl) { //ERROR
    int op;
    char *aux, *aux2, *aux3;

    op = strncmp(l, "mkdir", 5);    

    if (op == 0) {
        printf("Sintaxis correcta, creando directorio...\n");

        aux = strrev(l);
        printf("%s \n", aux);

        aux2 = strncpy(aux2, aux, cl);
        printf("%s \n", aux2);

        aux3 = strrev(aux2);
        printf("%s \n", aux3);

        return (*aux3);
    } else {
        printf("Sintaxis incorrecta \n");
    };      
}
0
задан 25.02.2019, 04:07
1 ответ

Проверяя cГіdigo я не понимаю хорошо того, что estГЎs делая. В funciГіn main ты определяешь линию, как array 256 символов и tambiГ©n ты определяешь array 256 указателей в chars в lineab. Следующая линия не имеет смысл:

lineab[256] = &linea[256];

EstГЎs сохраняя в lineab, в ней posiciГіn 256, которые он не считает размещенными, потому что ты разместил с 0 до 255, ее direcciГіn памяти элемента 256 из линии, которая также не является твоей, потому что ты только можешь снабжать ссылками с 0 до 255. Она posiciГіn estГЎ вне твоего array, и если он не дает excepciГіn мало тебе, тебе не хватает 256.

В вызове cargaLinea(&linea[256], &cantlinea); estГЎs происходя, как первый parГЎmetro она direcciГіn памяти элемента 256 из линии и не целая линия, что как я сказал тебе раньше, не принадлежит твоему array (только ее posiciГіn 0 в 255, разместив 256 символов).

, Если ты определяешь char linea[256], podrГЎs относиться потом к переменной используя имя той же самой, костлявой linea и не linea[256]. И если то, что querГ-схвати с lineab, было указателем в цепь, если ты делаешь что-то как:

char линия [256], *lineab; lineab = линия;

lineab и линия apuntarГЎn в ту же самую direcciГіn памяти. Если ты перемещаешь любую из двух переменных одну funciГіn, что меняет контент символов, когда две переменные выходят ее funciГіn seguirГЎn указывая на ту же самую direcciГіn памяти, у которой есть тот же контент.

я не могу помогать тебе mГЎs, потому что это не проблема, из которого он делает ее funciГіn validaLinea, а всей программы, которую также я не понимаю совсем. Я советую тебе, чтобы ты проверил documentaciГіn использования и definiciГіn arrays и указатели в C. Приветствие.

0
ответ дан 19.11.2019, 23:02