如何在C中将char数组转换为普通char

时间:2013-11-16 07:02:11

标签: c

让我说我有:

char myName[] = "Jason Marks ";

我想把它转移到普通的char中。以下方法无效:

char fullName = myName[];

我怎样才能让整个“Jason Marks”转移到新变量中? 而且,是否可以从该新变量中删除字符?

例如,删除第一个字符并保留:

"ason Marks "

2 个答案:

答案 0 :(得分:1)

char存储一个字符,你需要的是一个数组。

使用另一个char数组,并使用strncpy将n个字符从源复制到目标。

strncpy(destination, source, length);

所以在你的情况下你会这样做:

char fullName[MAX_SIZE];   // Ensure MAX_SIZE >= strlen(myName) + 1,
                           // or dynamically allocate using malloc
                           // with the above size and remember to
                           // free it later.
strncpy(fullName, myName, strlen(myName));

现在,为什么不复制你需要的东西,而不是删除新数组中的第一个字符?

strncpy(fullName, myName + 1, strlen(myName)-1);
                         ^^^ Start from 2nd position, index: 1

答案 1 :(得分:1)

无法在char中存储字符串变量。由于char能够保存单个字节,因此您尝试存储的是一些n个字节的字符串。

相反,您可以使用指针来执行此操作:

char array[] = "My Name";
char *ptr = array;

现在,如果您只需要"y Name",只需将ptr增加1,即ptr++;,现在如果使用ptr打印printf,您将获得"y Name" {1}}。

注意:您也可以使用char *ptr = "My Name";,但问题是这会将字符串"My Name"存储在只读位置,即ptr将指向不可修改的位置 因此,在结论中,您不允许执行以下任何操作:ptr[0] = 'B';但您可以ptr++;

编辑:回应 Jason Marks的评论

你可以用\0字符替换最后一个字符,即
ptr[strlen(ptr) - 1] = '\0';