C语言中的字符串连接
我读了一篇文章,其中展示了c(64位,linux)中两个字符数组的串联,然后我发现了问题:C语言中的字符串连接,c,char,C,Char,我读了一篇文章,其中展示了c(64位,linux)中两个字符数组的串联,然后我发现了问题: 我在windows中运行代码,但得到了另一个结果 运行代码“*a=*b”时,a和b之间的地址不同 在第二个while循环中,代码只运行了两次,b指针是“\000”,并且存在于循环中 代码如下: #包括 内部主(空) { char aa[]=“Studytonight”; char bb[]=“-最佳学习场所”; char*a; char*b; printf(“aa[%s]\n”,aa); printf(“
#包括
内部主(空)
{
char aa[]=“Studytonight”;
char bb[]=“-最佳学习场所”;
char*a;
char*b;
printf(“aa[%s]\n”,aa);
printf(“bb[%s]\n”,bb);
a=aa;
b=bb;
而(*a)
{
a++;
}
而(*b)
{
*a=*b;
b++;
a++;
}
*a='\0';
printf(“连接后的字符串是:%s\n”,aa);
printf(“bb现在是[%s]\n”,bb);
系统(“暂停”);
返回(0);
}
这是我想知道的文章中的结果,是第二个和第三个问题,我不需要已经存在的函数来连接两个字符数组。
您试图将字节附加到字符串aa,但只有足够的字节来保存其自身的内容。如果您想实际添加更多字节,您应该首先分配更大的数组。像这样:
char aa[80]=“Studytonight”;
这里80是一个任意的“足够大”的数字——数组的末尾将有一些额外的空间,可以从字符串bb中添加字节。连接两个字符串时
strcat()
(原型为string.h
)为您执行串联
#include <stdio.h> // puts()
#include <string.h> // strlen(), strcat()
int main( void )
{
char aa[] = "Studytonight ";
char bb[] = "- Bestplace to learn";
char cc[ strlen( aa ) + strlen( bb ) + 1 ];
strcpy( cc, aa );
strcat( cc, bb );
puts( cc );
}
注意:链接代码包含未定义的行为。这是因为它的写入超出了缓冲区的末尾aa[]
。这可能导致“堆栈崩溃”甚至seg故障事件
主程序中的所有内容进行编程
函数:
system()
在头文件中是原型:stdlib.h
但是,发布的代码缺少以下语句:#include
因此没有干净地编译AKS谢谢你的帮助,我是一个初学者。感谢你的帮助,我用aa[80]成功运行了它但是blog.holbertonschool.com/code-review-string-concatenation-in-c这篇文章中的代码并没有减少aa的大小,它也得到了结果,我的主要问题是我给出的第二个和第三个问题。如果你仔细阅读,作者会发现代码是错误的,而它工作的事实实际上是巧合。当这种事情发生时,编译器被允许破坏它。
int ch;
while( (ch = getchar()) != '\n' && ch != EOF ){;}
getchar();
char *mystrcat(char *dest, const char *src)
{
char *ret = dest;
while(*dest) dest++;
while((*dest++ = *src++));
return ret;
}
char aa[] = "Studytonight ";
char bb[] = "- Bestplace to learn";
char cc[sizeof(aa) + sizeof(bb) - 1] = {0};
#define STUDY "Studytonight "
#define BEST "- Bestplace to learn"
char aa[sizeof(BEST) + sizeof(STUDY) - 1] = STUSY; //aa has enough space to accommodate both strings
char bb[] = BEST;