有什么方法可以使用 memcpy() 将值复制到特定的字符串位置?
Is there any way I can copy values into a specific string position using memcpy()?
我正在努力寻找使用 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);
}
输出-> 字符串:123400abcd
如果有人想出点子,我将不胜感激。
您的代码的行为是未定义。
您可以通过写 char string [15] = {'[=10=]'};
来解决这个问题。这会将 all 字符串内存初始化为零(第一个字符明确设置为 [=11=]
,后续字符默认初始化为零)。
目前正在发生的事情是 strcat
遍历 string
直到它找到一个空终止符,然后再连接 "abcd"
。由于您的 memset
和我已经在您假设 string
初始化为当你写 char string [15];
时为 0
您有两个主要问题:
- 忘记在使用
memcpy
时指定偏移量
- 在应用
strcat
时没有终止字符串 null
试试这个:
char string [15] = {0};
memset(string,'0',6);
memcpy(string + 6,"1234",4);
strcat(string,"abcd");
printf("String: %s\n",string);
输出:0000001234abcd
迂腐版:
#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;
}
我正在努力寻找使用 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);
}
输出-> 字符串:123400abcd
如果有人想出点子,我将不胜感激。
您的代码的行为是未定义。
您可以通过写 char string [15] = {'[=10=]'};
来解决这个问题。这会将 all 字符串内存初始化为零(第一个字符明确设置为 [=11=]
,后续字符默认初始化为零)。
目前正在发生的事情是 strcat
遍历 string
直到它找到一个空终止符,然后再连接 "abcd"
。由于您的 memset
和我已经在您假设 string
初始化为当你写 char string [15];
您有两个主要问题:
- 忘记在使用
memcpy
时指定偏移量
- 在应用
strcat
时没有终止字符串 null
试试这个:
char string [15] = {0};
memset(string,'0',6);
memcpy(string + 6,"1234",4);
strcat(string,"abcd");
printf("String: %s\n",string);
输出:0000001234abcd
迂腐版:
#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;
}