【问题标题】:C: convert int[ ] to stringC: 将 int[ ] 转换为字符串
【发布时间】:2014-02-20 06:20:01
【问题描述】:

从技术上讲,我意识到它们略有不同,因为数组是空终止的。但正在寻找一种转换方式

int charArray[] = {'h', 'e', 'l', 'l', 'o'};  //ascii chars = ints

char *string;

【问题讨论】:

  • 对数组值使用{ } 而不是[ ]
  • 发布我的答案后,现在我真的怀疑你的int 是一个错字。毕竟变量有一个名字charArray
  • 于,这里处理的是ASCII字符,所以底层的ints...
  • 但需要将其作为字符串传递给另一个函数,即 char *
  • @Live2Enjoy7 我还是不明白为什么你有一个int[],这些数据是从哪里来的?

标签: c arrays string char


【解决方案1】:

由于charArray 不是字符串,您不能使用strcpy()strlen() 等标准函数。相反,复制每个字符,并在末尾添加'\0'sizeof(charArray) / sizeof(int) 可以告诉你要复制多少个字符。

size_t sz = sizeof(charArray) / sizeof(int);
char *string = malloc(sz + 1);
for (int i = 0; i < sz; i++)
{
    string[i] = charArray[i];
}
string[sz] = '\0';

【讨论】:

  • 嗯,如果我想把它分解成一个函数,你会建议我如何传入 charArray[i]?
  • @Live2Enjoy7 将数组作为函数参数传递时要小心,因为它会被转换为指针,因此sizeof 会给出指针的大小而不是数组。您可以考虑将数组的大小作为另一个参数传递,例如 func(int array[], size_t size)
  • 不幸的是编译器抱怨 string[i]=charArray[i] 说的是预期的表达式
  • 这将删除警告字符串[i]=*charArray[i]
【解决方案2】:

您不能在c 中的int[]char * 之间进行转换。不过,您可以遍历数组并使用所需的值构建 char*,然后将 \0 添加到末尾。您也可以使用(char*) charArray 进行类型转换,但这很容易出现很多问题,例如缺少\0 终止符。例如,它不适用于strcpy

【讨论】:

    【解决方案3】:
    char arr[] = {'h','e','l'};
    string str(arr);
    cout<<str<<endl; // output hel
    

    【讨论】:

    • 他可能只问 C 代码
    • 对不起,我没看到标签。
    【解决方案4】:

    charArrayint[8] 类型,而 stringchar * 类型。它们是不同且不兼容的类型,您无法将一种转换为另一种。您可以做的是定义一个足够大小的字符数组,然后将整数(隐式转换为char 类型)从charArray 复制到其中。

    // length of charArray
    
    int length = sizeof charArray / sizeof charArray[0];
    
    char string[length + 1]; // +1 for the null byte
    for(int i = 0; i < length; i++)
        string[i] = charArray[i];  // copy the characters 
    string[i] = '\0';   // add the terminating null byte
    

    【讨论】:

      猜你喜欢
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      相关资源
      最近更新 更多