如何在不使用 sprintf 或 strcpy 的情况下将字符串分配给 char 数组

Mnk*_*isd 3 c arrays string pointers char

char array[12];
sprintf(array, "%s %s", "Hello", "World");
printf(array); // prints "Hello World"
Run Code Online (Sandbox Code Playgroud)

有没有办法不使用sprintfor来做到这一点strcpy

chq*_*lie 5

您不能直接将字符串分配给数组,但可以从字符串文字初始化数组:

char array[] = "Hello World";  // this defines array with a size of 12 bytes
Run Code Online (Sandbox Code Playgroud)

如果您稍后想要将不同的字符串存储到array,则必须使用字符串复制函数,例如:

strcpy(array, "Hello Buddy");      // assuming array has at least 12 bytes
memcpy(array, "Hello Buddy", 12);  // assuming array has at least 12 bytes
snprintf(array, sizeof array, "%s %s", "Hello", "Buddy");
Run Code Online (Sandbox Code Playgroud)

或者您可以一次分配一个字符:

array[6] = 'B';
array[7] = 'u';
array[8] = 'd';
array[9] = 'd';
array[10] = 'y';
array[11] = '\0';
Run Code Online (Sandbox Code Playgroud)

请注意,最好使用snprintf而不是sprintf避免潜在的缓冲区溢出。还要避免将变量数组传递给printf,如果它包含字符,这将导致未定义的行为%。始终使用常量格式字符串:

printf("%s\n", array);
Run Code Online (Sandbox Code Playgroud)