[英]using pointers for string in c
所以我寫了這段代碼
char *word = "Metal Gear";
int counter = 0;
printf("word = ");
for(;;)
{
printf("%c", *word);
*(word++);
counter++;
if(*word == '\0')
break;
}
變量計數器來計算我的單詞字符串的長度。
這段代碼為什么不打印空字符?
我知道我告訴它一旦遇到空字符就中斷,但是我的print語句在if子句之前,所以它不應該打印它然后中斷循環。
如果if子句位於for循環的最開始,怎么會沒有區別呢?
更新:當我在它,C是否允許數組的可變長度?
我對此感到困惑,因為我讀到它允許並且不允許。
我的假設是c99允許這樣做,但是自c99標准發布以來,許多文章和博客都沒有更新。 我對么?
這段代碼為什么不打印空字符?
因為您在打印循環之前就將其中斷。 另外,空字符可能沒有任何視覺表示,因此即使您打印它,也可能什么也看不到。
我的打印語句在if子句之前,因此不應該打印它,然后跳出循環。
在打印后將指針增加1,因此在確定中斷時間時,始終檢查剛打印的字符之后的下一個字符。
第一件事:printf的%c參數期望一個有效的(即非NULL)指針,因此將NULL傳遞給它是正式未定義的並且很聰明
第二:根據邏輯,您在打印之前從for循環中退出。 如果要檢查,請嘗試以下操作。
#include <stdio.h>
#include <string.h>
int main()
{
char *word = "Metal Gear";
int counter = 0;
printf("word = ");
for(;;)
{
printf("%c ", *word);
if(*word == '\0'){
printf("%d", counter);
break;
}
*(word++);
counter++;
}
return 0;
}
如在printf中一樣,我給了額外的空間,它將打印為“ word = M Getal G ear 10” ,在“ r”和“ 10”之間有2個空格
當我在使用它時,c是否允許數組的長度可變? 我對此感到困惑,因為我讀到它允許並且不允許。 我的假設是c99允許這樣做,但是自c99標准發布以來,許多文章和博客都沒有更新。 我對么?
C99引入了VLA。 使用C的網站允許他們是正確的; 說C不允許VLA的網站已過時。
但是,仍在使用針對C89(C90,C94)的C編譯器/實現(例如: gcc -std=c89 -pedantic ...
)。 對於這些編譯器,不能選擇VLA。
無論如何, 除了非常小的數組,您不應該在代碼中使用VLA :)
主要是因為VLA沒有錯誤檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.