📜  门| GATE CS Mock 2018年|第49章

📅  最后修改于: 2021-06-29 19:31:49             🧑  作者: Mango

考虑下面的代码。函数myStrcat连接两个字符串。它将b的所有字符附加到a的末尾。因此,预期输出为“极客测验”。程序可以正常编译,但是在运行时会产生分段错误。

void myStrcat(char *a, char *b)
{
    int m = strlen(a);
    int n = strlen(b);
    int i;
    for (i = 0; i <= n; i++)
       a[m+i]  = b[i];
}
  
int main()
{
    char *str1 = "Geeks ";
    char *str2 = "Quiz";
    myStrcat(str1, str2);
    printf("%s ", str1);
    return 0;
}

以下哪项更改可以更正程序,以便打印“ Geeks Quiz”?
(A) char * str1 =“极客”;可以更改为char str1 [100] =“ Geeks”;
(B) char * str1 =“极客”;可以更改为char str1 [100] =“ Geeks”;在myStrcat的末尾添加a [m + n-1] =’\ 0’行
(C)在myStrcat的末尾添加a [m + n-1] =’\ 0’行
(D)在myStrcat()的开头添加’a =(char *)malloc(sizeof(char)*(strlen(a)+ strlen(b)+ 1))行答案: (A)
说明:当str1声明为字符指针时,它存储在只读存储器块中,因此无法修改。

有关详细说明,请参见以下内容– http://www.geeksforgeeks.org/storage-for-strings-in-c/

选项(A)是正确的。这个问题的测验