在C语言中连接字符数组

在C语言中连接字符数组,c,string,arrays,C,String,Arrays,我有一个字符数组: char* name = "hello"; char* name = "hello"; 我想给这个名字加一个扩展名 hello.txt 我该怎么做 name+=“.txt”不起作用看看这个函数 特别是,您可以尝试以下方法: const char* name = "hello"; const char* extension = ".txt"; char* name_with_extension; name_with_extension = malloc(strlen(n

我有一个字符数组:

char* name = "hello";
char* name = "hello";
我想给这个名字加一个扩展名

hello.txt
我该怎么做

name+=“.txt”
不起作用

看看这个函数

特别是,您可以尝试以下方法:

const char* name = "hello";
const char* extension = ".txt";

char* name_with_extension;
name_with_extension = malloc(strlen(name)+1+4); /* make space for the new string (should check the return value ...) */
strcpy(name_with_extension, name); /* copy name into the new var */
strcat(name_with_extension, extension); /* add the extension */

首先使用将当前字符串复制到更大的数组中,然后使用

例如,您可以执行以下操作:

char* str = "Hello";
char dest[12];

strcpy( dest, str );
strcat( dest, ".txt" );

你可以在这里复制并粘贴答案,或者你也可以去阅读我们的主持人乔尔所说的内容。

\include
#包括
#包括
char*name=“你好”;
内部主(空){
char*ext=“.txt”;
int len=strlen(name)+strlen(ext)+1;
char*n2=malloc(len);
char*n2a=malloc(len);
如果(n2==NULL | | n2a==NULL)
中止();
strlcpy(n2,名称,len);
strlcat(n2,ext,len);
printf(“%s\n”,n2);
/*或符合C99*/
strncpy(n2a,名称,len);
strncat(n2a,ext,len-strlen(n2a));
printf(“%s\n”,n2a);
返回0;//此退出,否则释放n2和n2a
}
我有一个字符数组:

char* name = "hello";
char* name = "hello";
不,您有一个指向的字符指针。在许多用法中,您可以添加常量修饰符,这取决于您是对name指向的内容更感兴趣,还是对字符串值“hello”更感兴趣。您不应该试图修改文字(“hello”),因为

要传达的主要内容是C没有正确的(或一级的)字符串类型。“字符串”通常是字符(字符)数组,带有一个终止的空('\0'或十进制0)字符以表示字符串的结束,或指向字符数组的指针

char *hi="Hello";
char *ext = ".txt";
char *cat;

asprintf(&cat, "%s%s", hi, ext);

我建议您阅读《C编程语言》(第28页,第二版)第1.9节中的字符数组。我强烈建议您阅读这本小书(
asprintf
不是100%标准的,但它可以通过GNU和BSD标准C库获得,所以您可能有它。它分配输出,所以您不必坐在那里数数字符

char *hi="Hello";
char *ext = ".txt";
char *cat;

asprintf(&cat, "%s%s", hi, ext);

您可以使用sprintf()函数连接字符串。例如:

char file[80];
sprintf(file,"%s%s",name,extension);

您将在“文件”中结束连接字符串.

在极少数情况下,您无法使用
strncat
strcat
strcpy
。并且您没有访问
的权限,因此无法使用
strlen
。此外,您可能甚至不知道字符数组的大小,并且您仍然希望连接,因为您只有指针。嗯,您可以这样做d学校马洛克和计数字符自己喜欢

char *combineStrings(char* inputA, char* inputB) {
    size_t len = 0, lenB = 0;
    while(inputA[len] != '\0') len++;
    while(inputB[lenB] != '\0') lenB++;
    char* output = malloc(len+lenB);
    sprintf((char*)output,"%s%s",inputA,inputB);
    return output;
}

它只需要
#包含
,你很可能已经包含了它

别忘了用扩展名释放name\u!你能写
const char*name,*extension
?字符串文字不是
char*
。对C来说有点新,但是malloc中的+1+4(strlen(name)+1+4)是怎么回事我猜+4是4个额外的字符,但是+1是什么呢?+1是用来解释字符末尾的空终止符string@lopsided98为什么
sizeof(char)
没有使用实际的字节计数?例如
malloc(strlen(name)+4*sizeof(char)+1)
这是一个比OP选择的解决方案更好的解决方案:它不使用malloc(在例程运行后,将重新分配堆栈中分配的内存)而且它有很多很好的错误检查。@Casey malloc不在堆栈上…@nmnir你完全正确。我想说的是,由于OP选择的答案使用了malloc,所以它并不理想,部分原因是它使用了堆上的内存。相比之下,这个答案更好,因为它不使用malloc,因此它的内存会更大在程序运行后重新分配给堆栈并重新分配。我括号的使用是模棱两可的,现在编辑它已经太晚了。