[英]Replacing character within string
這是一個非常基本的問題,已經被問了很多,但是我看過的所有示例都略有不同
#include<stdio.h>
int main() {
char title[] = "HELLO!";
title[1] = "F";
printf("%s", title);
}
為什么這會導致以下錯誤-
jdoodle.c:6:14: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
title[1] = "F";
干杯
它需要像這樣:
#include<stdio.h>
int main() {
char title[] = "HELLO!";
title[1] = 'F';
printf("%s", title);
}
'F'
是一個字符,它與作為字符串的"F"
。 永遠記住,字符串是字符數組。
"F"
是字符串文字。 它的類型為char[2]
(也就是說,它是一個包含字符串的字符數組),並且在內存中的顯示方式如下:
char unnamed_literal[] = { 'F', '\0' };
根據C標准(6.4.5字符串文字)
6在轉換階段7中,將一個或多個字符串文字產生的每個多字節字符序列附加一個零值的字節或代碼 。78) 然后將多字節字符序列用於初始化一個靜態存儲持續時間和長度足夠的數組包含序列。 對於字符串文字,數組元素的類型為char,並使用多字節字符序列的各個字節進行初始化...
例如,嘗試執行此語句
printf( "%zu\n", sizeof( "F" ) );
在此表達聲明中
title[1] = "F";
左操作數的類型為char
而右操作數的類型為char[2]
隱式轉換為指向其第一個元素char *
指針。
來自C標准(6.3.2.1左值,數組和函數指示符)
3除非它是sizeof運算符或一元&運算符的操作數,或者是用於初始化數組的字符串文字,否則類型為“ array of type”的表達式將轉換為類型為“ pointer”的表達式鍵入'',它指向數組對象的初始元素,不是左值。 如果數組對象具有寄存器存儲類,則該行為是不確定的。
所以在這句話
jdoodle.c:6:14:警告:賦值從指針進行整數轉換而無需強制轉換
試圖將字符串文字的第一個字符的地址分配給沒有意義的字符。
顯然,您的意思是將字符常量'F'
分配給char
類型的對象title[1]
。
那是你的意思是下面的陳述
title[1] = 'F';
您可以使用字符串文字,但需要其第一個字符而不是其地址。 你可以寫例如
title[1] = "F"[0];
要么
title[1] = *"F";
甚至喜歡
title[1] = 0["F"];
但是,當然,使用字符常量代替字符串文字會更好,更簡單
title[1] = 'F';
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.