簡體   English   中英

我可以為字符指針數組分配一個整數嗎?

[英]Can i assign a integer to a character pointer array?

int k=5;
char* result = (char *)malloc(100 * sizeof(char));
result[count] = k;

考慮到上面的代碼,如果我打印result[count]的內容,它會打印笑臉符號。 我試過如下,但沒有用。

result[count]=(char)k;

誰能幫我?

我認為malloc(100*sizeof(char))將連續創建100個字符大小的塊。 如果我錯了,請糾正我?

我將忽略有關數組和 malloc 的所有內容,因為它與您描述的問題無關。 您似乎本質上是在問“此代碼將打印什么:”

char c = 5; 
printf("%c", c);

它將在您的符號表中打印符號 5,很可能是一個不可打印的字符。 當遇到不可打印的字符時,一些實現選擇打印非標准符號,例如笑臉。

如果要打印數字 5,則必須使用字符文字:

char c = '5';
printf("%c", c);

或者使用帶有“幻數”的糟糕風格:

char c = 53;   // don't write code like this
printf("%c", c);

這是字符表示的問題。 讓我們先從相反的開始。 可以將char提升為int ,但如果這樣做,您將獲得字符的表示(其code )。 假設您使用 ASCII:

char c = '5';
int i = c; // i is now 0x35 or 53 ASCII code for '5'

您的示例正好相反,5 可以用字符表示,因此定義了result[count] = k (即使您應該收到可能被截斷的警告),但代碼 5 的 ASCII 字符是控制代碼 ENQ,將是在 Windows 系統上使用代碼頁 850 或 437 打印為

進行轉換(int) 5 -> (char) '5'的半可移植(未指定,但已知適用於所有常見體系結構)方法是記住代碼 '0' 到 '9' 是連續的(如是'A'到'Z'和'a到'z'),所以我認為你想要的是:

result[count] = '0' + k;

首先,讓我們稍微清理一下代碼:

int k=5;
char* result = malloc(100);
result[count] = k;

sizeof(char) 在任何平台下總是等於 1 並且你不需要在 C 中轉換 malloc() 的返回值。

這就是說,只要您的count變量包含 0 到 99 之間的值,您就沒有做錯任何事情。 如果要打印實際字符 '5',則必須分配該字符的 ASCII 值 (53),而不僅僅是數字 5。另外,請記住,如果必須將該字符數組解釋為字符串,你需要用 '\\0' 終止它:

int k=5, i;
char* result = malloc(100);
for (i=0; i<98; i++) {
    result[i] = ' ';
}
result[98] = 53;
result[99] = '\0';
printf("%s\n", result);

您嘗試分配的數組中的元素都是一個字符的大小,1 個字節。 int 是 4 個字節,因此您的問題。 如果要將整數存儲在數組中,可以執行以下操作:

int result[100];

其次是存儲價值,但老實說,從你提出問題的方式來看,我不知道這是否真的是你想要做的。 嘗試用您想要完成的內容重新表述帖子。

您是否嘗試將 5 存儲為一個字符?

暫無
暫無

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

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