簡體   English   中英

使用strstr確定給定的字符串是否包含帶空格的字符串[C]

[英]Using strstr to determine if a given string contains a string with spaces [C]

我正在研究一個使用strstr()函數的示例。

如果輸入“ Pamela Sue Smith”,為什么程序輸出“” Pamela“是子字符串!” 而不是““ Pamela Sue Smith”是子字符串!“。

#include <stdio.h>
#include <string.h>

void main(void)
{
  char str[72];
  char target[] = "Pamela Sue Smith";

  printf("Enter your string: ");
  scanf("%s", str);

  if (strstr( target, str) != NULL )
    printf(" %s is a sub-string!\n", str);
}
  1. main沒有return類型的void但是有int
  2. scanf可能會失敗。 檢查返回值。
    如果成功,它將返回分配的參數數量。
  3. %s僅讀取非空白,直到下一個空白(因此為1個字)。
  4. %s不限制讀取多少個非空白字符。 緩沖區溢出可能是致命的。
    使用%71s (緩沖區大小:字符串長度+ 1作為終止符)
  5. 您將參數交換為strstr

scanf的手冊頁中:

“ s”-匹配一系列非空格字符; 下一個指針必須是指向字符數組的指針,該指針必須足夠長以容納輸入序列和終止的空字節('\\ 0'),該字符會自動添加。 輸入字符串停在空白處或最大字段寬度處,以先到者為准。

因此,“蘇·史密斯”這一部分從來​​沒有達到str 您可以使用fgets來一次讀取整行:

if (fgets(str, sizeof str, stdin) == NULL) {
    printf("End of file\n");
    return;
}

請注意,在這種情況下, str包含終止行尾字符。 你可以做

if (*str != '\0')
    str[strlen(str) - 1] = '\0';

刪除它。 (此外,正如其他人已經指出的那樣,對strstr的“干草堆”爭論首先出現。)

暫無
暫無

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

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