[英]cast a char into a char* in C
我有一个字符数组s[11]="0123456789";
并且我希望能够获取每个数字s[i]
(使用 for 循环)并以某种方式将其转换为char*
(我需要一个 char*,特别是因为我需要在其他字符串上使用 strncat)
在过去的 4 个小时里,我一直在尝试这样做,但我什么也做不了。
除非您愿意暂时修改s
,或将角色复制到其他地方……否则您会遇到困难。
s
。int main() {
char s[11] = "0123456789";
for (int i = 0; i < strlen(s); i++) {
// Modify s in place.
const char tmp = s[i+1];
s[i+1] = '\0';
char *substr = &s[i];
// Do something with substr.
printf("%s\n", substr);
// Fix s
s[i+1] = tmp;
}
}
s[i]
复制到一个新字符串。int main() {
char s[11] = "0123456789";
for (int i = 0; i < strlen(s); i++) {
// Create a temporary string
char substr[2];
substr[0] = s[i];
substr[1] = '\0';
// Do something with substr.
printf("%s\n", substr);
}
}
假设您实际上正在使用strncat
或类似的...这些功能非常简单,尤其是当您仅附加一个字符时。 您可能只是创建自己的版本。
void append_character(char *buffer, int buffer_size, char new_character) {
int length = strlen(buffer);
if (length + 2 < buffer_size) {
buffer[length] = new_character;
buffer[length+1] = '\0';
} else {
// No space for an additional character, drop it like strncat would.
}
}
或者你可以将它作为一个简单的 strncat 包装器来完成:
void append_character(char *buffer, int buffer_size, char new_character) {
char new_string[2] = { new_character, '\0' };
strncat(buffer, buffer_size, new_string);
}
你的要求没有任何意义。 一个字符是一个小数字。 指针是某个内存的地址。 将字符转换为指针不会给你一个有效的指针,而是一个一旦使用就会崩溃的指针。
对于 strncat,您需要一个包含 C 字符串的字符数组。 您可以通过编写 char array[2] 来创建一个字符串; (现在你有一个包含两个字符空间的数组),然后 array[0] = whatchar; 数组[1] = 0; 现在你有一个 C 字符串,其中有一个字符和一个尾随零字节的空间。
还有一个想法:
#include <stdio.h>
#include <string.h>
int main(void)
{
char src[11]="0123456789";
char dest[50]="abc";
char* p = src;
int i = 0;
int len = strlen(src);
for (i = 0; i < len; i++)
{
strncat(dest,p,1);
p++;
}
printf("src: %s\n", src);
printf("dest: %s\n", dest);
return 0;
}
在Ubuntu下用gcc编译:
$ gcc hello_str.c -o hello_str
输出:
$ ./hello_str
src: 0123456789
dest: abc0123456789
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.