C 如何将字符*转换为字符[]

C 如何将字符*转换为字符[],c,pointers,dereference,C,Pointers,Dereference,我想知道是否有一种方法可以将第一个字母由char*指向的字符串转换为char[],因此它不再是指针,而是文字字符[] 例如,如果我的字符串是“hi my name is bob\0”,并且char*pointer已通过memcpy将此字符串复制到它,是否有方法将其返回到char[] 任何帮助都将不胜感激。无需转换,您可以将指针作为数组索引。你可以 char * a; 蚂蚁那么做吧 char ch = a[4]; 这里有一个类似的问题 另一种方法也同样简单 void f(int* p); i

我想知道是否有一种方法可以将第一个字母由char*指向的字符串转换为char[],因此它不再是指针,而是文字字符[]

例如,如果我的字符串是“hi my name is bob\0”,并且
char*pointer
已通过memcpy将此字符串复制到它,是否有方法将其返回到char[]


任何帮助都将不胜感激。

无需转换,您可以将指针作为数组索引。你可以

char * a;
蚂蚁那么做吧

char ch = a[4];
这里有一个类似的问题

另一种方法也同样简单

void f(int* p);

int x[5];
f(x);     // this is the same as f(&x[0])

无需转换,您可以将指针作为数组索引。你可以

char * a;
蚂蚁那么做吧

char ch = a[4];
这里有一个类似的问题

另一种方法也同样简单

void f(int* p);

int x[5];
f(x);     // this is the same as f(&x[0])
像这样的

#define STRLEN (64)
char greeting[STRLEN];

strncpy(greeting,chrptr,STRLEN);

if (strlen(chrptr) > (STRLEN-1))
   greeting[(STRLEN-1)] = 0;
像这样的

#define STRLEN (64)
char greeting[STRLEN];

strncpy(greeting,chrptr,STRLEN);

if (strlen(chrptr) > (STRLEN-1))
   greeting[(STRLEN-1)] = 0;

它们是一样的。a[i]相当于*(a+i),以至于你可以写i[a]得到同样的结果

它们是一样的东西。a[i]相当于*(a+i),以至于你可以写i[a]得到同样的结果

使用strncpy或strcpy:

char *a = "hello world!";
int aLen = strlen(a);
char b[] = new char[aLen + 1]; // C++ version
// char* b = (char*)malloc((aLen + 1) * sizeof(char)); // C version
strncpy(b, a, aLen);
b[aLen] = '\0';
使用strncpy或strcpy:

char *a = "hello world!";
int aLen = strlen(a);
char b[] = new char[aLen + 1]; // C++ version
// char* b = (char*)malloc((aLen + 1) * sizeof(char)); // C version
strncpy(b, a, aLen);
b[aLen] = '\0';

好。。。为什么它还不够好?我觉得这是个XY问题。。是的,确实是这样。@H2CO3“字符串”实际上是以jbyterarray开始的,我必须将其转换为jbyte*,最终转换为char*。我一直有内存损坏的问题,所以我改变了字符数组中出现错误的指针。这可能是一个幼稚的解决方案,但首先想到的是:)您缺少了一个语言标签。你说的是jByteArray,所以我猜是,或者。嗯。。。为什么它还不够好?我觉得这是个XY问题。。是的,确实是这样。@H2CO3“字符串”实际上是以jbyterarray开始的,我必须将其转换为jbyte*,最终转换为char*。我一直有内存损坏的问题,所以我改变了字符数组中出现错误的指针。这可能是一个幼稚的解决方案,但首先想到的是:)您缺少了一个语言标签。你说的是jByteArray,所以我认为是,然后是或。但是,它们不是同一件事:但是,它们不是同一件事:如果我们想要一个C解决方案,值得添加一个注释,说明将使用
malloc()
而不是
new
。值得添加一个注释,说明
malloc()如果我们想要C解决方案,将使用
而不是新的。是的!就是这样。不过我有个问题。strcpy引用说strcpy应该这样定义
char*strcpy(char*destination,const char*source)在这种情况下,为什么char*destination不必是指针?修正了迂腐的类型。strcpy和strncpy都返回目标指针以方便您。在本例中,问候语数组类似于char*。C认为在这种情况下它们是等效的。(是的,我知道数组和指针并不完全相同…@jim Well played:)术语是数组在传递给函数时会衰减为指针/隐式转换为指针。是的!就是这样。不过我有个问题。strcpy引用说strcpy应该这样定义
char*strcpy(char*destination,const char*source)在这种情况下,为什么char*destination不必是指针?修正了迂腐的类型。strcpy和strncpy都返回目标指针以方便您。在本例中,问候语数组类似于char*。C认为在这种情况下它们是等效的。(是的,我知道数组和指针并不完全相同……@jim Well played:)术语是数组在传递给函数时衰减为指针/隐式转换为指针。