Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中的字符串开头添加字符?_C_Char_Dynamic Memory Allocation_C Strings - Fatal编程技术网

如何在C中的字符串开头添加字符?

如何在C中的字符串开头添加字符?,c,char,dynamic-memory-allocation,c-strings,C,Char,Dynamic Memory Allocation,C Strings,我试图在字符串的开头添加一个字符,但当我打印最后一个字符串时,结果是: 流程结束,退出代码为1073741819(0xC0000005) 这是我的代码: char * letter=malloc(strlen(output)+2); letter[0]='a'; strcat(letter,output); output=malloc(strlen(output)+2); strcpy(output,letter); free(letter); printf("\n%s",o

我试图在字符串的开头添加一个字符,但当我打印最后一个字符串时,结果是:

流程结束,退出代码为1073741819(0xC0000005)

这是我的代码:

char * letter=malloc(strlen(output)+2);
letter[0]='a';
strcat(letter,output);
output=malloc(strlen(output)+2);
strcpy(output,letter);
free(letter);
printf("\n%s",output);

output
是我给方法的字符串输入。

要使用
strcat
目标数组应包含字符串。您的数组
字母
不包含字符串

你可以写一个例子

letter[0] = 'a';
letter[1] = '\0';
strcat( letter, output );
或者只是

letter[0] = 'a';
strcpy( letter + 1, output );
请注意,这似乎是一种说法

output=malloc(strlen(output)+2);
产生内存泄漏,因为指针
输出指向的先前分配的内存未被释放

该任务可以在不为辅助阵列分配内存的情况下完成。您可以使用标准函数
realloc
重新分配
output
指向的原始数组。然后使用
memmove
将存储的字符串向右移动一个位置,然后在第一个位置插入字符
'a'

这是一个演示程序

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) 
{
    size_t n = 5;
    char *s = malloc( n * sizeof( char ) );
    strcpy( s, "ello" );
    
    char *tmp = realloc( s, ( n + 1 ) * sizeof( char ) );
    
    if ( tmp != NULL )
    {
        s = tmp;
        memmove( s + 1, s, n );
        s[0] = 'H';
        ++n;
    }
    
    puts( s );
    
    free( s );
    
    return 0;
}

letter
需要以null结尾,以便正确使用
strcat(letter,output)
Hello