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