2、如下程序用于输出“Welcome to Huawei Test”,请指出其中的两处错误,并给出错误原因。
char * GetWelcome(void){
char * pcWelcome;
char * pcNewWelcome;
pcWelcome=”Welcome to Huawei Test”;
pcNewWelcome=(char *)malloc(strlen(pcWelcome));
if(NULL==pcNewWelcome){
return NULL;
free(pcNewWelcome);
}
strcpy(pcNewWelcome, pcWelcome);
return pcNewWelcome;
}
错误1 :pcNewWelcome=(char *)malloc(strlen(pcWelcome));修改为 pcNewWelcome=(char *)malloc(strlen(pcWelcome)+1);
错误2: return NULL; free(pcNewWelcome);顺序错了,先free再return
测试程序如下:
#include
#include
#include
char * GetWelcome(void){
char * pcWelcome;
char * pcNewWelcome;
pcWelcome=”Welcome to Huawei Test”;
pcNewWelcome=(char *)malloc(strlen(pcWelcome));
if(NULL==pcNewWelcome){
return NULL;
free(pcNewWelcome);
}
strcpy(pcNewWelcome, pcWelcome);
return pcNewWelcome;
}
void main(){
char * str;
str=GetWelcome();
printf(str);
}
3、请指出下面程序的两处错误,并给出错误原因:
unsigned long FUNC_B(unsigned char str)
{
unsigned long sum;
while(0<=str)
{
sum+=str;
str–;
}
return sum;
}
错误1:sum赋初值=0;
错误2:0<=str修改为0 测试程序: #include #include #include unsigned long FUNC_B(unsigned char str) { unsigned long sum = 0; while(0 { sum+=str; str–; } return sum; } //see it clearly! //this button;右键添加断点或者(F9) //this menu; 或者菜单栏中组件—>开始调试(F5) //shift+F9—quick watch //找到原因了吧?嗯,sum 初始化问题, int main() { //now,initial this sum;let us get the issue; //declare a num first; //add a breakpoint here //clearly unsigned long summer; summer = FUNC_B(5); return 0; } 应用题 注意:p是数组的首地址,相当于指针常量,是不能赋值。p++ 相当于 p = p + 1; 隐含的要改变p的值,这肯定不成, 也就是说p不能做左值(l-value) ,应该换个指针变量来指向p。 1、对于一个任意输入的少于200字节的字符串,把它按‘-’分成若干子串(子串最多20个),输出原始字符串和每个子串,要求能依次处理用户输入的多个字符串,直到用户输入字符串“0”时程序退出。 #include using namespace std; #include void main(){ char str_s[200]; char *ptr=str_s; char *pt=str_s; int lenth; cout<<”please input the source string you want to deal with:”< while(true){ gets(str_s); lenth=strlen(str_s); char *ptr=str_s; char *pt=str_s; if (str_s[0] == ’0′) { break; } int flag=0,length=0; if(lenth<200){ while(*ptr!=’\0′&&length<=lenth){ cout<<*ptr; ptr++; length++; } cout< while(*pt!=’\0′&&flag<=20){ if(*pt!=’-'){ cout<<*pt; pt++; } else{ flag++; pt++; cout< } } cout< } cout<<”please input the source string you want to deal with:”< } } 小笨解析: #include “stdafx.h” #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char getword[200]; cout<<”Please enter your word:”< while (true) { cin>>getword; if (getword[0] == ’0′) {break;} } return 0; } 这么写就能处理多个了 小笨的程序:引入临时数组 #include using namespace std; int main() { cout<<”Please enter your word:”< //char outdata[20][200];//用于保存输出的二维数组。 while (true) { char getword[200]={‘\0′};//保存用户输入的数组 cin>>getword; //用户输入,碰到回车键的时候进行判断 cout< if (getword[0] == ’0′)//如果输入为0,退出执行程序 { break; } int num = 0;//源数组的计数 int tempnum = 0;//临时数组的计数 int length = strlen(getword); if (getword[length - 1] != ‘-’)//如果最后一个字符不是“-”,则自动添加一个“-” { getword[length] = ‘-’; getword[length + 1] = ‘\0′; } char temparray[200]={‘\0′};//数组初始化操作 while (getword[num] != ‘\0′) { if (getword[num] == ‘-’)//如果碰到了“-”数组计数依然向后移动, //而临时数组归零,为下一个数组。 { temparray[tempnum] = ‘\0′; cout< tempnum = 0; } else { temparray[tempnum] = getword[num];//将子串赋给临时数组 tempnum++; } num++; } cout<<”Please enter your word:”< } return 0; } 小笨讲解: 指向字符串的指针就不用重新申请空间. char a[111]; char *b = a; 申请,比如malloc(sizeof(int) * num);是指向一片内存区域。 2、将parabuf[]中的字符串,如“123”,“-301”等转化成数字123,-301并输出,不能用atoi等函数。 #include using namespace std; int change(char* str) { int base = 0; while (*str) { base = base * 10 + (*str) – ’0′; str++; } return base; } void main() { char str[100]; cin>>str; int value1; if (*str == ‘-’) { value1 = -1 * change(str + 1); } else{ v