📜  门| GATE CS Mock 2018 |第 49 题

📅  最后修改于: 2021-09-25 06:37:47             🧑  作者: Mango

考虑以下代码。函数myStrcat连接两个字符串。它将 b 的所有字符附加到 a 的末尾。所以预期的输出是“Geeks Quiz”。该程序编译良好,但在运行时产生分段错误。

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))答案:(一)
说明:当 str1 被声明为字符指针时,它存储在只读内存块中,因此不能修改。

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

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