C-如何读取长度未知的字符串
这是我的密码:C-如何读取长度未知的字符串,c,C,这是我的密码: int main() { int i=0; int size=1; char *pntName=NULL;//a pointer to an array of chars. pntName = (char*) malloc(size *sizeof(char));//allocate sapce for the first char. while(pntName[size-1]!=':'){ if(pntName!=NUL
int main() {
int i=0;
int size=1;
char *pntName=NULL;//a pointer to an array of chars.
pntName = (char*) malloc(size *sizeof(char));//allocate sapce for the first char.
while(pntName[size-1]!=':'){
if(pntName!=NULL)//check the case couldn't allocate
printf("Error");
else{
if(i<size){//meaning there is space for new char.
scanf("%c",&pntName[i]);
i++;
}
else{//case we don't have enough space
size++;
pntName = (char*)realloc(pntName,(size)*sizeof(char));//reallocat space.
scanf("%c",&pntName[i]);
i++;
}
}
}
return 1;
}
intmain(){
int i=0;
int size=1;
char*pntName=NULL;//指向字符数组的指针。
pntName=(char*)malloc(size*sizeof(char));//为第一个字符分配sapce。
而(pntName[size-1]!=':'){
if(pntName!=NULL)//检查案例是否无法分配
printf(“错误”);
否则{
如果(i您的错误案例在这里有问题
if (pntName != NULL)
printf("Error");
在读取任何输入之前的循环的第一次迭代中,pntName
被分配(设置为非空值),因此错误条件通过,字符串“error”已打印出来。您不是要退出while条件,因此这将无限期地重复。字符串需要以'\0'
结尾,因此允许额外的字符。重新分配时,最好使用另一个指针,以防重新分配失败
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i=0;
int size=1;
char *pntName=NULL;//a pointer to an array of chars.
char *temp=NULL;//a temporary pointer
pntName = malloc( size + 1);//allocate space for two char one for the '\0' to terminate the string
while(1){
size++;
temp = realloc(pntName, size + 1);//reallocat space.
if ( temp == NULL) {
printf ( "error allocating memory");
free ( pntName);
return 1;
}
pntName = temp;
if ( ( scanf("%c",&pntName[i])) == 1) {
i++;
pntName[i] = '\0'; // terminate the string
if ( pntName[i-1] == ':') {
break;
}
}
else {
break;
}
}
printf ( "\n%s\n", pntName);
free ( pntName);// release memory
return 0;
}
#包括
#包括
内部主(空){
int i=0;
int size=1;
char*pntName=NULL;//指向字符数组的指针。
char*temp=NULL;//临时指针
pntName=malloc(size+1);//为两个字符分配空间,一个字符用于“\0”终止字符串
而(1){
大小++;
temp=realloc(pntName,size+1);//reallocat空间。
if(temp==NULL){
printf(“错误分配内存”);
免费(pntName);
返回1;
}
pntName=温度;
if((scanf(“%c”)和pntName[i])==1){
i++;
pntName[i]='\0';//终止字符串
如果(pntName[i-1]==':'){
打破
}
}
否则{
打破
}
}
printf(“\n%s\n”,pntName);
释放(pntName);//释放内存
返回0;
}
您面临的问题是什么?您不应该在c中转换malloc的结果,也请给我们一些您遇到的意外结果和sizeof(char)
与1
没有区别。使用它是胡说八道。除了缺少#include
s之外,所示代码不包含任何重大问题。但是,它不会围绕扫描/重新分配部分循环,因此它只读取一个字符
,然后结束。参考您的更新:…==…
您确定吗?我已经修复了,但是打印字符串时仍然有问题,有时它会在“:”之后打印其他值