19

问答题 19 /36

下面程序想打印“Welcome MSR Asia”,改正错误。

<stdio.h><stdio.h><string.h><string.h>char * GetName (void)
{
    //To return “MSR Asia” String
     char name[]="MSR Asia";
    return name;
}
void main(int argc, char* argv[])
{
    char name[32];
    //Fill in zeros into name
    for(int i=0;i<=32;i++) { 
         name[i]='\0';
    } 
    //copy “Welcome” to name 
    name="Welcome"; 
   //Append a blank char 
   name[8]=" "; 
   //Append string to name 
   strcat(name,GetName()); 
   //print out 
   printf(name); 
}
</string.h></string.h></stdio.h></stdio.h>

参考答案

改正后为
char * GetName (void)
{
    //To return “MSR Asia” String
    //char name[]="MSR Asia"; (1)
    char *name=(char *)malloc(strlen("MSR Asia")+1);
    strcpy(name,"MSR Asia");
    return name;
}
void main(int argc, char* argv[])
{
    char name[32];
    //Fill in zeros into name
    for(int i=0;i<=32;i++) { 
        name[i]='\0'; 
    } 
    //copy “Welcome” to name 
    //name="Welcome"; (2) 
    strcat(name,"Welcome "); 
    //Append a blank char 
    // name[8]=' '; (3) 
    //Append string to name 
    char *p=GetName(); (4) 
    strcat(name,p); 
    free (p); 
    //print out printf(name); 
} 
原因:(1)在函数内部定义的变量在函数结束时就清空了,必须动态分配内存(2)字符串赋值语句错误,应该用 strcat (3)该语句无效,可去掉 (4)定义一个指针指向动态分配的内存,用完后需用 free 语句释放