[英]c, c++ most basic double quotes
char* a="HELLO WORLD";
如果“ H”的地址為0x01,則帶有%s的printf將打印到D,但是如果使用手動打印例程編寫了相同的代碼
while(*a!=NULL) {printf("%c",n[a]);n++;}
這會再打印幾個字符。
printf("%s",a);
完美打印。
while(*a++) printf("%c", *(a-1)); or
for(;*a++;)printf("%c", *(a-1));
雖然工作,但我不想解決方案,但過程機制..
所以我想到的問題是
printf是從某個寄存器(或任何存儲單元)獲取字符串的長度還是執行字符檢查..然后打印...
索引到字符串的方式很奇怪。 它適用於字符串,但不會停止,因為您永遠不會更改* a的值。 您的程序所做的是嘗試獲取n
a
偏移量,因此對於前11個位置,它們是相同的,但是循環不會終止,因為*a
始終為'H'
。 您希望終止條件是n < strlen(a)
。
但是,編寫該程序的更簡潔的方法是:
int main(int argc, char **argv) {
char *a = "HELLO WORLD";
while(*a) printf("%c", *a++);
return 0;
}
之所以可行,是因為a
是一個字符數組,當我們打印出每個字符(取消引用存儲在該位置的值)時,我們也將移至下一個位置。 該字符串應以NULL引用終止,這將導致循環在NULL終止符處終止正弦*a == 0
。
您的意思是您還是有錯誤:
int main() {
int n = 0;
char* a="HELLO WORLD";
while(a[n] != NULL) {printf("%c",a[n]);n++;}
}
關於錯誤的解釋:
while(*a!=NULL) printf("%c",n[a]);n++;
a
不會在任何地方修改,因此*a
不會更改其值。 n[a]
在CI中是完全有效的構造,但強烈建議不要使用它,因為它在語義上是不正確的。 您按索引訪問數組,而不是按數組訪問。 n++
),但檢查指向數組的指針。 你能不能增加a
inself這樣的: while(*a!=NULL) {printf("%c",*a);a++;}
這樣做的核心方法是:
#include <iostream>
using namespace std;
int main() {
char *a="HELLO WORLD";
int n = 0;
while(a[n]!=NULL){
cout<<a[n];
n++;
}
cout<<'\n';
return 0;
}
據我所記得,默認情況下,當您創建char* a
,它將在內存中顯示為{HELLO WORLD\\0}
(%s知道字符串結尾的方式是'\\ 0')。
不知道'\\0' == null
是否會產生true ..但我對此表示懷疑
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.