【问题标题】:How to convert a char* to a char[]如何将 char* 转换为 char[]
【发布时间】:2013-08-13 15:19:34
【问题描述】:

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 嗯...为什么还不够好?我觉得这是一个 XY 问题。
  • What is the XY problem。是的,绝对是那样的感觉。
  • @H2CO3 “字符串”实际上以 jbyteArray 开始,我必须将其转换为 jbyte*,最后转换为 char*。不过,我一直遇到内存损坏问题,所以我正在将发生错误的指针更改为字符数组。这可能是一个幼稚的解决方案,但这是首先想到的 :)
  • 您缺少语言标签。你说的是 jByteArray,所以我假设它是 jni,然后是 cc++

标签: c pointers dereference


【解决方案1】:

无需转换,您可以像索引数组一样索引指针。你可以去

char * a;

蚂蚁然后做

char ch = a[4];

这里有一个类似的问题here

其他方法也一样简单

void f(int* p);

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 但是,它们不是相同的东西:C-FAQ
    【解决方案3】:

    这样的?

    #define STRLEN (64)
    char greeting[STRLEN];
    
    strncpy(greeting,chrptr,STRLEN);
    
    if (strlen(chrptr) > (STRLEN-1))
       greeting[(STRLEN-1)] = 0;
    

    【讨论】:

    • 是的!就像这样。但我有个问题。 strcpy 引用说 strcpy 应该像这样定义 char * strcpy ( char * destination, const char * source ); 为什么在这种情况下 char* 目的地不必是指针?
    • 为迂腐类型修复。
    • 为方便起见,strcpy 和 strncpy 都返回目标指针。在这种情况下,问候数组就像一个 char *。在这种情况下,C 认为它们是等价的。 (是的,我知道数组和指针并不完全相同......)
    • @jim 打得好 :) 术语是数组在传递给函数时衰减为/隐式转换为指针。
    【解决方案4】:

    使用 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';
    

    【讨论】:

    • 如果我们需要 C 解决方案,则值得添加一条说明,说明将使用 malloc() 而不是 new
    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 2021-04-29
    • 2013-10-18
    • 2012-01-15
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    相关资源
    最近更新 更多