Enviado em 24/01/2023 - 20:33h
Boa noite a todos
Montei o exemplo abaixo, para mostrar o erro que está apresentado, e pra saber se é possível fazer o que explico no último exemplo.
Abaixo tenho uma função usando o sprintf:
Ocorre que não quero usar PATH_MAX, pois ele tem limite e isso quebraria o programa se o caminho de um arquivo exceder esse limite!
Mas quero saber se essa é a única forma, e ainda tenho dúvida no comentário do programa abaixo!
Montei o exemplo abaixo, para mostrar o erro que está apresentado, e pra saber se é possível fazer o que explico no último exemplo.
Abaixo tenho uma função usando o sprintf:
Ocorre que não quero usar PATH_MAX, pois ele tem limite e isso quebraria o programa se o caminho de um arquivo exceder esse limite!
char DirectorySearch[PATH_MAX];Consegui fazer somente assim, ou seja, definindo o tamanho do meu ponteiro:
sprintf(DirectorySearch, "%s/%s", DirectoryPath, FileName->d_name);
Mas quero saber se essa é a única forma, e ainda tenho dúvida no comentário do programa abaixo!
#include <stdio.h>Montei o exemplo abaixo pra mostrar o que está ocorrendo. Da forma que gostaria de fazer se for possível
#include <stdlib.h>
#include <string.h>
int main(void) {
const char Text1[] = "Bom dia";
const char Text2[] = "Viva o Linux";
// É necessário eu dar o espaço do character finalizador \0 ???
// 2 = vírgula e espaço | 1 seria o character finalizador
char *Ponteiro = malloc(strlen(Text1) + strlen(Text2) +2 +1); // Não coloquei 3 pra entenderem minha dúvida sobre o \0
sprintf(Ponteiro, "%s, %s", Text1, Text2);
puts(Ponteiro);
free(Ponteiro);
}
#include <stdio.h>
int main(void) {
// Usar const ou não aqui não muda os erros abaixo
const char Text1[] = "Bom dia";
const char Text2[] = "Viva o Linux";
// O compilador não aceita declarar assim!
//char *Ponteiro; // error: ‘Ponteiro’ is used uninitialized [-Werror=uninitialized]
// Se inicializo o ponteiro como Nulo, sprintf não aceita!
//char *Ponteiro = NULL; // Esse erro dá no sprintf error: argument 1 null where non-null expected [-Werror=nonnull]
// Tentei
// sprintf(*Ponteiro, "%s, %s", Text1, Text2); // error: passing argument 1 of ‘sprintf’ makes pointer from integer without a cast [-Wint-conversion]
// Talvez exista alguma conversão que não conheço que permita que o ponteiro funcione com sprintf?
// OBS não quero usar [b]asprintf[b] pois já conheço ela!
sprintf(Ponteiro, "%s, %s", Text1, Text2);
puts(Ponteiro);
}