簡體   English   中英

在c中使用字符串指針

[英]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.

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