【发布时间】:2018-05-20 06:54:28
【问题描述】:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void generarCadena(char *);
void generarDimension(int, void **, int);
void reallocarDimensiones(int , void **, int);
int main(void){
char *caracter=NULL;
generarCadena(&caracter);
printf("%d", sizeof(caracter));
printf("%s", &caracter);//I want to now why this doesn't print
return 0;
}
void generarCadena(char *scaneado){
unsigned int cont;
char lector;
generarDimension(1,&scaneado,sizeof(char));
cont = 0;
while(!scanf("%s", &scaneado)){
while((strcpy(lector,getchar())) !='\n' && lector!=EOF){
reallocarDimensiones(1,&scaneado[cont],sizeof(char));
cont++;
}
}
printf("%s", &scaneado);/*Inside de function it prints,
however, it doesn't print outside it*/
}//This function is for the dynamic char
void generarDimension(int bloques, void **ptr, int tamanho){
*ptr = malloc(bloques * tamanho);
if(*ptr==NULL){
printf("No se pudo almacenar memoria\n");
}
}//This function mallocs any given pointer
void reallocarDimensiones(int bloques, void **ptr, int tamanho){
*ptr = realloc(*ptr,bloques * tamanho);
if(*ptr==NULL){
printf("No se pudo almacenar memoria\n");
}
}//This function reallocs any given pointer
嗨,我现在想知道如何在将字符写入键盘时动态存储它,所以我为它制作了一个函数。我想在其中发送一个 char 指针,但它似乎没有修改它。我遇到的另一个问题是我的函数只存储了一些数据,所以如果数据太长,我的程序就会崩溃。
【问题讨论】:
-
printf("%s", &caracter);-->> 地址不是字符串。如果你想打印变量或指针的地址,或者任何 C 语言的地址,你应该在printf()中使用%p。%s格式说明符专门用于字符串。 -
*ptr = realloc(*ptr,bloques * tamanho);这通常是个坏主意。始终使用临时的,检查NULL然后分配。否则你可能有泄漏。 -
@AjayBrahmakshatriya 谢谢你的建议!
-
scanf("%s", &scaneado)-->scanf("%s", scaneado). -
reallocarDimensiones(1,&scaneado[cont],sizeof(char));-- 这是怎么回事?&scaneado[cont]是指向char的指针,但reallocarDimensiones()接受void **参数。