这是我的代码:
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;
}
我试图读取包含名称的字符串。用户可以输入字符,直到他输入&#39;:&#39;。 我的代码出了什么问题?
答案 0 :(得分:5)
字符串需要以'\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;
}
答案 1 :(得分:2)
您的错误案例存在问题。
if (pntName != NULL)
printf("Error");
在读取任何输入之前的循环的第一次迭代中,pntName
被分配(设置为非空值),因此错误条件通过并打印出字符串“Error”。你没有朝着退出的状态前进,所以这无限期地重复。