我很难找到使用string.h函数memset(...),memcpy(...)和strcat(...)来获取以下字符串的方法:
0000001234abcd
我需要使用memcpy,如果不返回字符串的开头,我就找不到办法。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void main () {
char string [15];
memset((void *)string,'0',6*sizeof(char));
memcpy(string,"1234",4);
strcat(string,"abcd");
printf("String: %s\n",string);
}
输出 - &GT;字符串:123400abcd
如果有人提出想法,我会非常感激。
答案 0 :(得分:3)
您有两个主要问题:
memcpy
strcat
试试这个:
char string [15] = {0};
memset(string,'0',6);
memcpy(string + 6,"1234",4);
strcat(string,"abcd");
printf("String: %s\n",string);
输出:0000001234abcd
答案 1 :(得分:3)
迂腐版:
#include <stdio.h>
#include <string.h>
int main (void)
{
char string [15];
const char substr1 [] = "1234";
const char substr2 [] = "abcd";
const size_t zeroes = 6;
memset(string, '0', zeroes);
memcpy(&string[zeroes], substr1, sizeof(substr1)); // includes null term
strcat(string, substr2);
printf("String: %s\n", string);
return 0;
}
答案 2 :(得分:1)
代码的行为是未定义。
您可以写\0
来解决这个问题。这会将所有字符串内存初始化为零(第一个字符显式设置为strcat
,后续字符默认初始化为零。)
目前正在发生的事情是string
遍历"abcd"
,直到它找到一个nul-terminator,然后再连接memset
。由于您的string
以及未定义的行为,我们已经在您假设char string [15];
初始化为0时已经提到过,因此该流程正在发出两个额外的字符写DataTrigger