簡體   English   中英

將兩個 int 數組復制到 C 中的一個 char*

[英]copy two arrays of int to one char* in C

我必須使用 int 數組,例如arr1={0,1,1,0,0} , arr2={1,0,1,1,1}並且我需要返回由malloc創建的 1 個 char* 將顯示像這樣: "01100,10111" 當我做 for 循環時它不起作用,我該怎么做?

char* ans = (char*)malloc((size * 2+1) * sizeof(int));
for (int i = 0; i < size; i++)
    ans[i] = first[i];
ans[size] = ",";
for (int i = size+1; i < 2*size+1; i++)
    ans[i] = second[i];

在眾多問題中:

  • 您的分配大小錯誤。 它應該包括用於分隔逗號終止空字符的空格。 sizeof(int)無論如何都是錯誤的,它應該是sizeof(char)並且因此可以省略( sizeof(char)始終為1 )。
  • 你的存儲是錯誤的。 您想要存儲字符,並且您的值應該相對於'0'進行調整。
  • 您對第二個循環的索引是錯誤的。

實際上,您首先不需要第二個循環:

char* ans = malloc(size * 2 + 2);
for (int i = 0; i < size; i++)
{
    ans[i] = '0' + first[i];
    ans[size+1+i] = '0' + second[i];
}
ans[size] = ',';
ans[2*size+1] = 0;

就是這樣。

您的代碼至少有四個問題。

  1. malloc尺寸不合適,你要使用sizeof(char)
  2. 您需要零終止它,因此您需要為終止零添加額外的空間
char* ans = (char*)malloc((size * 2+2) * sizeof(char));
second[size * 2+1] = 0;
  1. 第二個循環的索引也是錯誤的。 您正在越界訪問第二個數組。 使循環更像第一個。
  2. 我們還需要在循環中將integer數值轉換為char
for (int i = 0; i < size; i++)
    ans[size+i+1] = second[i] + '0';

1.

 char* ans = (char*)malloc((size * 2+1) * sizeof(int));
  • 這里的size是多少? 它沒有在提供的代碼中定義和聲明。
  • 您不需要將 malloc() 的返回值轉換為 char。 實際上,您不再需要強制轉換 malloc() 的返回值。 這是 C 早期的習慣。
  • 為什么在這里完全需要一個字符指針? 如果要打印01100,10111 ,則無需使用字符指針來輸出整數值。

2.

for (int i = 0; i < size; i++)
    ans[i] = first[i];
  • 再次,這里的size是多少?
  • 這里first是什么? 如果它不是指針,則此語句無效。

3.

    ans[size] = ",";
  • 此操作無效。 您正在嘗試將字符串分配給指針。
  • 順便說一句,我不知道你想用這個語句做什么。 您可以將逗號分隔在01100,10111的輸出中,而不打算將它包含在 int 數組本身的內存中。

4.

for (int i = size+1; i < 2*size+1; i++)
    ans[i] = second[i];
  • 同上:什么是 value 和size的類型?
  • 什么是second 如果它不是指針,則此語句無效。

5.

要回答問題標題:

(如何)將兩個 int 數組復制到 C 中的一個 char*

這是不可能的。 您不能將兩個數組及其數據復制到指向 char 的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM