考虑以下代码。函数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)是正确的。这个问题的测验