Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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中,“;at";打印字符串后签名_C_String_Insert - Fatal编程技术网

在C中,“;at";打印字符串后签名

在C中,“;at";打印字符串后签名,c,string,insert,C,String,Insert,我编写了一个函数,在“I”位置的字符串中插入一个子字符串,但我遇到了问题。当位置i={1或2或3}时,在打印最后一个字符串后,在“i”位置会出现一个“@”符号 void insert_sir(char *s , char inserted_s[20] , int pos ) { char result_s[30] ; strncpy(result_s,s,pos - 1); strcat(result_s,inserted_s); strcat(result_s

我编写了一个函数,在“I”位置的字符串中插入一个子字符串,但我遇到了问题。当位置i={1或2或3}时,在打印最后一个字符串后,在“i”位置会出现一个“@”符号

 void insert_sir(char *s , char inserted_s[20] , int pos )
{
    char result_s[30] ;
    strncpy(result_s,s,pos - 1);
    strcat(result_s,inserted_s);
    strcat(result_s,s + pos - 1);
    printf("%s",result_s);

}

您需要初始化字符数组,否则将从内存中获取随机数据。您可以轻松地使用
memset()
函数用相同的字符填充数组。在本例中,我用null填充它,这样printf只输出所需的文本,因为null是标准的终止字符

void insert_sir(char *s , char inserted_s[20] , int pos )
{
    char result_s[30] ;
    memset(result_s,0,30);
    strncpy(result_s,s,pos - 1);
    strcat(result_s,inserted_s);
    strcat(result_s,s + pos - 1);
    printf("%s",result_s);
}

您正在尝试插入到
s
结果中吗<代码>结果> <代码>未初始化,不应将字符的中间部分复制到结果中。我需要用“”或NULL初始化结果吗?(我不熟悉C字符串)我只使用了5个字符的长度进行编译。例如,如果我使用pos=4,它可以正常工作。我初始化了result_s=“”,它可以正常工作。如果您修改发布的代码,使result_s声明为
char result_s[30]=”
这不太正确,因为它只是将
结果的第一个字节设置为NUL字节。建议:
charresult\us[30]={'\0'}
因为这将把
result\u s[]
的所有字节设置为NUL,而不仅仅是第一个字节。感谢“memset”技巧。我是C弦新手,你的建议帮助了我!