难以理解 C 中的字符串声明
Having troubles understanding string declaration in C
我在理解使用动态内存的 C 语言中的字符串声明时遇到一些问题。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *putText(){
char *s=(char *) malloc(256+sizeof(char));
for(int i=0; *(s+i); i++) *(s+i)=getchar();
return s;
}
void main(){
printf("Write the text: ");
char *s=putText();
printf("%s", s);
}
在这个函数中,我尝试在 for 循环中使用 getchar()
声明字符串,但是当我尝试打印字符串时,它总是在第三个字符处停止。
我还是个新手,所以我可能犯了一些错误。有人可以帮忙吗?
此声明中分配的内存
char *s=(char *) malloc(256+sizeof(char));
可以包含任何垃圾。
所以for循环中的条件
for(int i=0; *(s+i); i++) *(s+i)=getchar();
没有意义。
相反你可以这样写
int c;
for ( size_t i=0; i + 1 < 256 && ( c = getchar() ) != EOF && c != '\n'; i++ )
{
*( s + i ) = c;
}
*( s + i ) = '[=12=]';
我在理解使用动态内存的 C 语言中的字符串声明时遇到一些问题。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *putText(){
char *s=(char *) malloc(256+sizeof(char));
for(int i=0; *(s+i); i++) *(s+i)=getchar();
return s;
}
void main(){
printf("Write the text: ");
char *s=putText();
printf("%s", s);
}
在这个函数中,我尝试在 for 循环中使用 getchar()
声明字符串,但是当我尝试打印字符串时,它总是在第三个字符处停止。
我还是个新手,所以我可能犯了一些错误。有人可以帮忙吗?
此声明中分配的内存
char *s=(char *) malloc(256+sizeof(char));
可以包含任何垃圾。
所以for循环中的条件
for(int i=0; *(s+i); i++) *(s+i)=getchar();
没有意义。
相反你可以这样写
int c;
for ( size_t i=0; i + 1 < 256 && ( c = getchar() ) != EOF && c != '\n'; i++ )
{
*( s + i ) = c;
}
*( s + i ) = '[=12=]';