int main()
{
char *a1[10] = {"123","121"};
int i =0;
char *a=NULL;
for(i=0;i<2;i++)
{
a=strcat(a1[i],"0000");
printf("values %s",a);
}
}
此代码的输出就是这样 $ ./a.exe 值1230000值0000000
但它应该是 $ ./a.exe 值1230000值1210000
请告诉我我错在哪里
答案 0 :(得分:6)
你想要一个char
数组的数组,但char *a1[10]
是一个指向char
的指针数组(通常放在只读段/字符串文字中),试图修改一个字符串文字通常会导致分段错误。
更改
char *a1[10] = {"123","121"}; /* Array of string literals (read only) */
到
char a1[][10] = {"123","121"}; /* Array of array of char (read - write) */
答案 1 :(得分:3)
问题是不真正修改了字符串。但行
char *a1[10];
影响一个10 char *
的数组,而不是指向我认为OP所期待的char[10]
数组的指针(如Jdamian评论中所述)。
要创建char[10]
数组,您必须写:
char a1[][10] = {"123","121"};
这样,您创建了一个2 char[10]
的数组,分别初始化为"123"
(事实上,{ '1', '2, '3, '\0', '\0', '\0', '\0', '\0', '\0', '\0'}
,因为它是真的 a {{1} })和&#34; 121&#34;;
通过这种方式,您可以安全char[10]
strcat
到"0000"
,因为3(初始长度)+ 4(添加长度)+ 1(终止空)给出8 <= 10。 / p>
但真正安全的方法是:
a1[i]