我在编写getstring函数时遇到了一些问题,这就是到目前为止我所知道的。
致敬,V
const char* getstring()
{
char *buffer;
int i = 255;
buffer = (char *)malloc(i*sizeof(char));
*buffer = getchar();
while ( *buffer != '\n' )
{
buffer++;
*buffer = getchar();
}
*buffer = '\0';
const char* _temp = buffer;
return _temp;
}
int main()
{
char* temp = getstring();
for ( ;temp++ ; *temp != '\0')
{
printf("%c", *temp);
}
return 0;
}发布于 2010-04-15 06:16:23
当后者指向字符串的终止'\0'时,您将_temp设置为buffer。
移动线条:
const char* _temp = buffer;紧跟在一行之后:
buffer = (char *)malloc(i*sizeof(char));这样_temp就指向了缓冲区的开头。
你还有一些其他的问题:
_temp -带有前导下划线的名称是保留的;i;NULL;*buffer;getchar()结果存储在int类型的变量中。Michael Mrozek在一条评论中指出,for循环中的表达式是错误的。...and作为一个风格点,sizeof(char)总是1,所以乘以它是不必要的;在C中,强制转换malloc()的结果是不必要的,并且被认为是不可取的(不像C++,在需要它的地方)。
发布于 2010-04-15 06:15:25
为什么不直接使用
char buffer[255];
scanf("%254s", &buffer);或
char* buffer = readline("GO GO GO:");发布于 2010-04-15 06:17:07
const char* _temp = buffer;将上面的语句移到malloc调用之后
重要信息:
释放在buffer在main()中使用后分配给它的内存。
free(temp);https://stackoverflow.com/questions/2641431
复制相似问题