String ในภาษา C

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับ String ในภาษา C เราจะพูดเกี่ยวกับการประกาศและใช้งาน String การรับค่าและการแสดงผล String และการใช้งานฟังก์ชันที่สำคัญจากไลบรารี่ string.h เพื่อจัดการกับ String

สตริง (String) หรือ Character sequence เป็นประเภทข้อมูลแบบข้อความที่ประกอบไปด้วยหลายตัวอักษร และอย่างที่เรารู้กันว่าข้อมูลประเภท char ใช้สำหรับเก็บข้อมูลหนึ่งตัวอักษร ดังนั้นในการที่จะเก็บหลายตัวอักษร เราจะต้องใช้ความสามารถของอาเรย์เข้ามาช่วยเพื่อทำงานร่วมกัน

ในภาษา C เราสามารถประกาศ String ได้โดยการกำหนดค่าให้กับอาเรย์ในรูปแบบของ String literal ซึ่งเบื้องหลังการทำงานนั้นมันจะถูกแปลงเป็นอาเรย์ของ char ให้เราอัตโนมัติ นี่เป็นตัวอย่าง

char str[] = "Mateo";

ในตัวอย่าง เป็นการประกาศ String ในภาษา C โดยการใช้ String literal สังเกตว่าค่าของ String นั้นจะแตกต่างกับตัวอักษรปกติ นั่นคือมันต้องอยู่ภายในเครื่องหมาย Double quote (") เสมอ ในขณะที่ข้อมูลประเภทตัวอักษร (char) จะอยู่ใน Single quote (')

String เป็นอาเรย์ของ char

เมื่อเราประกาศ String ในรูปแบบของ String literal เบื้องหลังแล้วภาษา C ได้แปลงข้อความดังกล่าวให้เก็บในรูปแบบอาเรย์ของตัวอักษร ดังนั้น ในตัวอย่างการประกาศ String ด้านบน จะมีค่าเท่ากับการประกาศอาเรย์ของตัวอักษรด้วยคำสั่งต่อไปนี้

char str[] = {'M', 'a', 't', 'e', 'o', '\0'};

การประกาศทั้งสองรูปแบบนั้นให้ผลลัพธ์เหมือนกัน แบบแรกเป็นการประกาศโดยใช้ String literal ซึ่งตัวภาษาจะแปลงเป็นอาเรย์ให้อัตโนมัติ และแบบที่สอง เป็นการประกาศในรูปแบบอาเรย์ของตัวอักษร หรือการประกาศอาเรย์ทั่วไป โดยเราต้องกำหนดแต่ละตัวอักษรให้เป็นสมาชิกของอาเรย์เอง

สำหรับการประกาศ String ในรูปแบบของอาเรย์นั้น จะเห็นว่าสมาชิกตัวสุดท้ายจะต้องเป็นตัวอักษร \0 เสมอ มันคือตัวอักษรพิเศษที่เรียกว่า null-terminated character ซึ่งใช้สำหรับระบุจุดสิ้นสุดของ String ดังนั้น เราจำเป็นต้องใส่ตัวอักษรนี้เสมอเมื่อเราประกาศ String ในรูปแบบของอาเรย์

เมื่อคอมไพเลอร์พบกับตัวอักษร \0 ใน String มันจะพิจารณาว่าตัวอักษรก่อนหน้าเป็นค่าของ String และเพิกเฉยตัวอักษรที่เหลือทั้งหมด และถ้าหากเราไม่ใส่ตัวอักษรนี้เพื่อระบุจุดสิ้นสุดของ String คอมไพเลอร์จะคิดว่าอักษรตัวถัดไปจากตัวสุดท้ายก็เป็นค่าของ String ด้วย นั่นจะทำให้ String ของเรามีตัวอักษรแปลกๆ ติดมา

ในตัวอย่างนี้จะแสดงให้คุณเห็นในสิ่งที่เราได้อธิบายมา

#include <stdio.h>

int main()
{
    char str1[] = {'H', 'e', 'l', 'l', 'o'};
    char str2[] = {'H', 'e', '\0', 'l', 'l', 'o'};
    char str3[] = {'H', 'e', 'l', 'l', 'o', '\0'};
    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);
    printf("str3: %s\n", str3);
    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

str1: Hello`‼_
str2: He
str3: Hello

ในตัวอย่าง แสดงการประกาศ String ด้วยรูปแบบอาเรย์ของตัวอักษร

char str1[] = {'H', 'e', 'l', 'l', 'o'};

ในตัวแปร str1 เราประกาศ String โดยไม่มีตัวอักษร \0 ระบุในตอนท้ายของอาเรย์ ซึ่งโปรแกรมจะไม่รู้ว่าจุดจบของ String อยู่ที่ไหน และมันพยายามไปเอาค่าถัดไปในอาเรย์ str1[5] ซึ่งเป็น Index ที่ไม่มีอยู่มาเป็นส่วนหนึ่งของ String ด้วย ดังนั้นจึงมีตัวอักษรแปลกๆ ติดมาในตอนท้าย ดังนั้น มันจึงจำเป็นที่จะต้องระบุจุดสิ้นสุดของ String เสมอ ในกรณีที่เราประกาศ String ในรูปแบบของอาเรย์

char str2[] = {'H', 'e', '\0', 'l', 'l', 'o'};

ต่อมาในตัวแปร str2 เราตั้งใจกำหนดจุดสิ้นสุดของ String ในตำแหน่งที่สามของอาเรย์ นั่นทำให้โปรแกรมพิจารณาค่าของ String ว่าเป็น "He" และเพิกเฉยตัวอักษรที่เหลือทั้งหมดไป ซึ่งในทางปฏิบัติมันไม่มีเหตุผลอะไรที่จะต้องทำเช่นนี้

char str3[] = {'H', 'e', 'l', 'l', 'o', '\0'};

สุดท้ายในตัวแปร str3 นี่เป็นวิธีที่ถูกต้องในการประกาศ String เราจำเป็นต้องระบุจุดสิ้นสุดของ String ในตำแหน่งสุดท้ายของอาเรย์ด้วยเสมอ

จากตัวอย่างนี้ แสดงการประกาศ String ในรูปแบบอาเรย์ของตัวอักษร ในทางปฏิบัติแล้วเรามักจะไม่ค่อยใช้วิธีนี้ เพราะการประกาศด้วย String literal สะดวกและง่ายกว่า และส่วนใหญ่ข้อมูลมักจะมาจากการรับค่าหรืออ่านค่ามากจากไฟล์ แต่ที่เราแสดงตัวอย่างให้คุณเห็นก็เพือให้คุณได้เข้าใจพื้นฐานของ String กับอาเรย์ในภาษา C

เนื่องจาก String นั้นเป็นอาเรย์ ดังนั้น เราสามารถเข้าถึงสมาชิกของอาเรย์ผ่าน Index เพื่อเปลี่ยนแปลงหรืออ่านค่าสมาชิกจากภายในอาเรย์ได้

#include <stdio.h>

int main()
{
    char name[] = "Mateo";

    printf("name: %s\n", name);
    printf("name[0]: %c\n", name[0]);
    printf("name[2]: %c\n", name[2]);

    name[1] = 'e'; // Changed second element to e
    printf("name[1]: %c\n", name[1]);
    printf("name: %s\n", name);

    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

name: Mateo
name[0]: M
name[2]: t
name[1]: e
name: Meteo

ในตัวอย่าง เรามีตัวแปร name สำหรับเก็บชื่อ หลังจากนั้นเราเข้าถึงสมาชิกตัวแรก name[0] และสมาชิกตัวที่สาม name[3] เพื่อแสดงตัวอักษรดังกล่าวออกมา ต่อมาเปลี่ยนค่าในตำแหน่งที่สอง name[1] เป็นตัวอักษร 'e' และแสดง String ทั้งหมดออกมาทางหน้าจอ ซึ่งการกระทำเหล่านี้เป็นการดำเนินการพื้นฐานของอาเรย์ ที่คุณได้เรียนรู้มาแล้วก่อนหน้าในบทของ อาเรย์

ตัวอย่างต่อมาเราจะใช้คำสั่ง for loop เพื่อวนอ่านค่าภายใน String

#include <stdio.h>

int main()
{
    char name[] = "Mateo";

    int length = sizeof(name) / sizeof(char);
    printf("String length is: %d\n", length);
    for (int i = 0; i < length; i++) {
        printf("name[%d]: %c\n", i, name[i]);
    }

    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

String length is: 6
name[0]: M
name[1]: a
name[2]: t
name[3]: e
name[4]: o
name[5]:

ในตัวอย่าง เป็นการใช้งานคำสั่ง for loop เพื่อวนอ่านค่าตัวอักษรใน String และแสดงผลออกมาทางหน้าจอ ในบรรทัดแรก เราได้ประกาศ String ที่มีค่าเป็น "Mateo"

int length = sizeof(name) / sizeof(char); // 6 / 1 = 6

เพื่อวนรอบ String ด้วยคำสั่ง for เราจำเป็นต้องทราบขนาดของอาเรย์ก่อน ดังนั้นเราสามารถหาขนาดของอาเรย์ได้โดยการนำขนาดของตัวแปร name หารด้วยขนาดของ char โดยการใช้ฟังก์ชัน sizeof ที่จะส่งค่ากลับขนาดของตัวแปรเป็นจำนวนเต็มในหน่วยไบต์ (1 ตัวอักษรใช้พื้นที่เก็บข้อมูล 1 ไบต์)

printf("String length is: %d\n", length);
for (int i = 0; i < length; i++) {
    printf("name[%d]: %c\n", i, name[i]);
}

จากนั้นเราแสดงความยาวของ String ออกมาทางหน้าจอ ซึ่งคุณจะสังเกตเห็นว่าขนาดของ String นั้นเป็น 6 แม้ว่าในตอนประกาศเรากำหนดค่าเป็น "Mateo" ซึ่งมีเพียงแค่ 5 ตัวอักษรเท่านั้น แต่ตอนนี้มันควรชัดเจนแล้ว เนื่องจากเรารู้ว่าเมื่อเราประกาศ String ในรูปแบบ String literal โปรแกรมจะแปลงเป็นอาเรย์ และเพิ่มตัวอักษร '\0' เพื่อบ่งบอกจุดสิ้นสุดของ String เข้ามาให้อัตโนมัติ ซึ่งตัวอักษรนี้ถือว่าเป็นค่าหนึ่งของ String

ดังนั้นถ้าหากคุณต้องการวนรอบตัวอักษณใน String เหมือนกับในตอนที่ประกาศไว้จริงๆ คุณสามารถทำเช่นนั้นได้โดยการกำหนดเงื่อนไขในคำสั่ง for loop เป็น i < length - 1; หรือฟังก์ชัน strlen แทน ซึ่งคุณจะได้เรียนต่อไป

หมายเหตุ: เพื่อหลีกเลี่ยงโปรแกรมนับตัวอักษร '\0' เป็นความยาวของ String ด้วย เราสามารถใช้ฟังก์ชัน strlen ในการหาความยาวของ String ได้ ซึ่งคุณจะได้เรียนในตอนท้ายของบทนี้

การประกาศ String

แน่นอนว่าก่อนใช้งานข้อมูลต่างๆ ในภาษา C นั้นเราจะต้องประกาศตัวแปรก่อน ต่อไปเป็นตัวอย่างการประกาศ String ซึ่งในภาษา C นั้นเราสามารถประกาศ String โดยกำหนดประเภทของข้อมูลได้สองแบบคือ แบบอาเรย์ และพอยน์เตอร์ นี่เป็นตัวอย่าง

char greeting[] = "Hello World";
char* sitename = "MarcusCode";

ในตัวอย่าง เป็นรูปแบบพื้นฐานในการประกาศ String โดยการใช้ String literal

ในตัวแปร greeting นั้นเป็นการประกาศโดยกำหนดประเภทข้อมูลเป็นอาเรย์ของตัวอักษรหรือ char[] ในขณะที่แบบที่สองเป็นการประกาศ String โดยกำหนดประเภทข้อมูลเป็นพอยน์เตอร์ของตัวอักษรหรือ char*

ซึ่งการประกาศทั้งสองรูปแบบนั้นให้ผลลัพธ์ที่เหมือนกัน แต่สิ่งที่แตกต่างกันคือในรูปแบบของพอยน์เตอร์นั้นเราสามารถเปลี่ยนแปลงค่าในตัวแปรด้วยตัวดำเนินการกำหนดค่า = หลังจากที่ String ประกาศไปแล้วได้

char greeting[] = "Hello World";
// error: assignment to expression with array type
greeting = "Hello Everyone"; 

ในตัวอย่าง เป็นการประกาศ String โดยการกำหนดประเภทข้อมูลเป็นอาเรย์ของตัวอักษร เมื่อเราประกาศแล้วเราไม่สามารถกำหนดค่าใหม่ให้กับ String ได้ ไม่เช่นนั้นคุณจะได้รับข้อผิดพลาดจากการกำหนดค่าให้กับอาเรย์

char* sitename = "MarcusCode";
sitename = "Google";

char* year;
year = "2020";

ในทางกลับกัน เราสามารถทำเช่นนี้กับ String ที่มีการกำหนดประเภทข้อมูลเป็นพอยน์เตอร์ได้ นั่นหมายความว่า เมื่อเราประกาศตัวแปรแล้ว เราสามารถเปลี่ยนค่าใหม่ในตัวแปรได้ตลอดเวลา

char greeting[] = "Hello World";
strcpy(greeting, "Hello Everyone");

อย่างไรก็ตาม สำหรับประเภทข้อมูลของ String แบบอาเรย์ เราสามารถใช้ฟังก์ชัน strcpy เพื่อคัดลอก String ใหม่ไปยังตัวแปรได้ ซึ่งคุณจะเรียนรู้และทราบเหตุผลในบทต่อไป

การรับค่าและการแสดงผล String

ในตัวอย่างต่อไปจะเป็นการรับค่าและแสดงผลข้อมูลประเภท String เราจะเขียนโปรแกรมรับชื่อและภาษาเขียนโปรแกรมโปรดของคุณ นี่เป็นตัวอย่าง

#include <stdio.h>

int main()
{
    char name[15];
    char lang[10];

    printf("Enter your name: ");
    scanf("%s", name);
    printf("Enter your language: ");
    scanf("%s", lang);

    printf("Hi %s.\n", name);
    printf("You might be a %s programmer.\n", lang);

    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Enter your name: Mateo
Enter your language: C
Hi Mateo, you might be a C programmer.

โปรแกรมถามให้เรากรอกค่าจากทางคีย์บอร์ดสองครั้ง ซึ่งเป็นชื่อและชื่อภาษาเขียนโปรแกรม ต่อไปมาดูกันว่าแต่ละคำสั่งทำงานอย่างไร

char name[15];
char lang[10];

เราประกาศตัวแปรอาเรย์สองตัวที่จะใช้เก็บค่าของ String จากการรับค่าผ่านทางคีย์บอร์ด และเราจะต้องกำหนดขนาดสูงสุดของข้อมูลที่เป็นไปได้ที่จะเก็บในตัวแปรนี้ ในกรณีนี้ เราสามารถเก็บชื่อได้มากสุด 15 ตัวอักษร และชื่อของภาษาเขียนโปรแกรมได้มากสุด 10 ตัวอักษร

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

ก่อนการรับค่า เราอาจจะแสดงข้อความบางอย่างเพื่อบอกกับผู้ใช้โปรแกรมด้วยฟังก์ชัน printf จากนั้นเราใช้ฟังก์ชัน scanf สำหรับรับค่า String จากทางคีย์บอร์ดเข้าไปเก็บไว้ในตัวแปร name ในการรับค่าและแสดงผล String นั้นเราใช้ Specifier เป็น %s

printf("Enter your language: ");
scanf("%s", lang);

ต่อมาเป็นการรับค่าเอาชื่อของภาษาเขียนโปรแกรมโปรด เข้ามาเก็บไว้ในตัวแปร lang

printf("Hi %s.\n", name);
printf("You might be a %s programmer.\n", lang);

หลังจากนั้นแสดงข้อมูลที่ผู้ใช้โปรแกรมกรอกเข้ามาออกทางหน้าจอ

หมายเหตุ: การรับค่าจาก Input stream (ในกรณีนี้คือคีย์บอร์ด) ในภาษา C จะสิ้นสุดเมื่อเรากด Enter หรือ Space นั่นหมายความว่าเราไม่สามารถรับค่า Space เข้ามาเก็บไว้ใน String ได้ อย่างไรก็ตาม ในบางครั้งเราอาจจะต้องการใช้ผู้ใช้กรอกทั้งชือและนามสกุลพร้อมกัน และเก็บไว้ในตัวแปรเดียวกัน หรือกล่าวอีกนัยหนึ่ง เราต้องการ Space ให้เป็นส่วนหนึ่งของ String ดังนั้นเราจะต้องทำการรับค่าด้วยวิธีอื่น และคุณจะได้เรียนรู้ในตัวอย่างถัดไป

ต่อไปเป็นตัวอย่างพิเศษสำหรับการรับค่าในภาษา C ในตัวอย่างที่ผ่านมา เราได้บอกว่าอาเรย์ไม่สามารถเปลี่ยนแปลงค่าได้หลังจากที่มันได้ถูกประกาศ ยกตัวอย่างเช่น

char name[15];
name = "Mateo";  // Error

แต่นี่อาจจะทำให้คุณสงสัยว่าในการรับค่าจากทางคีย์บอร์ด เราต้องประกาศอาเรย์ก่อน และทำไมค่าในตัวแปร name จึงสามารถเปลี่ยนแปลงได้

คำตอบนั้นเรียบง่าย ฟังชัน scanf ใช้พอยน์เตอร์ในการเปลี่ยนแปลงค่าของอาเรย์ และอย่างที่เราบอกไปแล้วว่าเมื่อเราประกาศตัวแปร String ในรูปแบบพอยน์เตอร์ char* เราสามารถเปลี่ยนค่ามันได้ นี่เป็นตัวอย่าง

#include <stdio.h>

int main()
{
    char name[15];
    char* p = &name;

    p[0] = 'M';
    p[1] = 'a';
    p[2] = 't';
    p[3] = 'e';
    p[4] = 'o';
    p[5] = '\0';

    printf("name: %s\n", name);

    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

name: Mateo

ในตัวอย่าง เป็นการแสดงวิธีเปลี่ยนแปลงค่าในอาเรย์ผ่านพอยน์เตอร์เหมือนกับที่ฟังก์ชัน scanf ทำ เนื่องจากว่าเราไม่สามารถเปลี่ยนแปลงค่าของอาเรย์ได้ด้วย String literal โดยตรง ยกตัวอย่างเช่น name = "Mateo"

char* p = &name;

พอยน์เตอร์นั้นเป็นตัวแปรที่เก็บที่อยู่ของตัวแปรอื่น ดังนั้นเราประกาศพอยน์เตอร์ p เพื่อเก็บที่อยู่ของอาเรย์ name เพื่อเข้าถึงที่อยู่ของตัวแปรใดๆ เราใช้ตัวดำเนินการ & นำหน้าตัวแปรเหล่านั้นเพื่อรับเอาค่าที่อยู่ในหน่วยความจำของมัน

p[0] = 'M';
p[1] = 'a';
p[2] = 't';
p[3] = 'e';
p[4] = 'o';
p[5] = '\0';

ในตอนนี้เราสามารถเข้าถึงตำแหน่งต่างๆ ของอาเรย์ name ได้ผ่านตัวแปรพอยน์เตอร์ p และกำหนดค่าที่ต้องการให้กับอาเรย์ โดยที่ ยกตัวอย่างเช่น ความจริงแล้ว p[2] ไม่ได้หมายถึงตัวแหน่งที่สองในอาเรย์ แต่มันเป็นการเข้าถึงที่อยู่ในหน่วยความจำที่อ้างอิงจากตำแหน่งแรกของอาเรย์ไปสองบล็อค

ถ้าหากคุณต้องการเข้าใจเกี่ยวกับพอยน์เตอร์ คุณสามารถเรียนรู้เพิ่มเพิ่มได้ในบทพอยน์เตอร์

การรับค่าด้วยฟังก์ชัน fgets

ในตัวอย่างก่อนหน้า เราได้เรียนรู้การรับค่า String จากทางคีย์บอร์ดด้วยฟังก์ชัน scanf ปัญหาที่เกิดขึ้นในการใช้ฟังก์ชันนี้ก็คือเราไม่สามารถรับค่า Space เข้ามาเป็นส่วนหนึ่งของ String ได้ ในตัวอย่างนี้ เราจะใช้ฟังก์ชัน fgets ที่ให้เราสามารถทำเช่นนั้นได้ นี่เป็นตัวอย่าง

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

int main()
{
    char name[30];
    char quote[100];

    printf("Enter your name: ");
    fgets(name, 30, stdin);

    printf("Enter favorite quote: ", name);
    fgets(quote, 100, stdin);

    printf("Name: %s\n", name);
    printf("Quote: %s\n", quote);

    printf("Length of Name: %d\n", sizeof(name)/ sizeof(char));
    printf("Length of Quote: %d\n", sizeof(quote)/ sizeof(char));

    printf("Length of Name: %d\n", strlen(name));
    printf("Length of Quote: %d\n", strlen(quote));

    return 0;
}

นี่เป็นผลลัพธ์การทำงานของโปรแกรม

Enter your name: Mateo Marcus
Enter favorite quote: Imagination is more important than knowledge.
Name: Mateo Marcus

Quote: Imagination is more important than knowledge.

Length of Name: 30
Length of Quote: 100
Length of Name: 13
Length of Quote: 46

ในตัวอย่าง โปรแกรมของเราต้องการถามชื่อจากทางคีย์บอร์ด และแน่นอนว่ามันจะสะดวกถ้าหากโปรแกรมของเราสามารถกรอกชื่อและนามสกุลพร้อมกันได้เลย จากนั้นเป็นการถามถึงคำคมโปรด และเช่นเดียวกัน คำคมอาจจะเป็นประโยคที่ยาวและมีหลายคำ ซึ่งคั่นด้วย Space ดังนั้นเราต้องการรับเอามันมาทั้งหมด

char name[30];
char quote[100];

เราได้ประกาศสองตัวแปรสำหรับเก็บชื่อและคำคม พร้อมกับกำหนดขนาดสูงสุดของ String

fgets(name, 30, stdin);

หลังจากนั้นเป็นการรับค่าด้วยฟังก์ชัน fgets โดยฟังก์ชันจะรับพารามิเตอร์สามตัวคือ ตัวแปร ขนาดของตัวอักษรที่ต้องการอ่าน (โดยทั่วไปแล้วมักจะเป็นขนาดสูงสุดของ String ตอนประกาศอาเรย์) และพอยน์เตอร์ stdin ซึ่งชี้ไปยังคีย์บอร์ด และการทำงานเช่นเดียวกันสำหรับการรับค่าของตัวแปร quote

ในตอนนี้เราสามารถกรอกค่าโดยมี Space ได้แล้ว และการรับค่าจะสิ้นสุดเมื่อกดปุ่ม Enter และสิ่งหนึ่งที่แตกต่างจากฟังก์ชัน scanf ก็คือ Enter จะกลายมาเป็นส่วนหนึ่งของ String ด้วยเสมอ นั่นหมายความว่าฟังก์ชัน fgets รับเอาทุกอย่างที่พิมพ์ผ่านคีย์บอร์ดเข้ามาจนกว่าเราจะกด Enter นั่นเอง

printf("Name: %s\n", name);
printf("Quote: %s\n", quote);

หลังจากนั้นเราแสดงชื่อและคำคมโปรดที่รับเข้ามาออกทางหน้าจอ จะเห็นว่าตอนนี้ Space ได้กลายมาเป็นส่วนหนึ่งภายใน String แล้ว แต่สิ่งที่ได้รับเพิ่มเข้ามาคือ Enter ที่ฟังก์ชัน fgets จะไม่ตัดออกให้ ดังนั้นเราต้องจัดการมันเอง

printf("Length of Name: %d\n", strlen(name));
printf("Length of Quote: %d\n", strlen(quote));

นอกจากนี้เราใช้ฟังก์ชัน strlen เพื่อนับความยาวของตัวอักษรภายใน String และแสดงผลออกทางหน้าจอ เราจำเป็นต้องนำเข้าไลบรารี่ string.h เพื่อใช้งานฟังก์ชันนี้

sizeof(name)/ sizeof(char);

ในตอนต้นของบทเรียนนี้ คุณอาจจะเห็นว่าเราสามารถหาความยาวของ String ด้วยฟังก์ชัน sizeof ได้ แต่นั่นได้ผลกับ String ที่ถูกประกาศในรูปแบบ String literal เท่านั้น ซึ่งฟังก์ชันนี้ใช้สำหรับหาขนาดทั้งหมดของอาเรย์ ในขณะที่ฟังก์ชัน strlen จะตรวจสอบความยาวของ String จากตัวอักษรระบุจุดสิ้นสุดของ String '\0' หรือ null terminated character

ดังนั้นวิธีที่จะตรวจสอบความยาวของ String ที่แม่นยำที่สุดก็คือการใช้ฟังก์ชัน strlen

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับ String ในภาษา C ซึ่งเป็นประเภทข้อมูลพิเศษที่ใช้ความสามารถของอาเรย์ เพื่อทำให้เราสามารถเก็บข้อมูลในรูปแบบข้อความหรือประโยคที่มากกว่าหนึ่งตัวอักษรได้ เราได้พูดถึงการรับค่าและการแสดงผล String ซึ่งจะต้องใช้ Specifier เป็น %s และการหาความยาวของ String ด้วยฟังก์ชัน strlen

ในบทต่อไป เราจะไปสำรวจฟังก์ชันเพิ่มเติมเกี่ยวกับ String สำหรับใช้จัดการ String ในรูปแบบต่างๆ เช่น การเชื่อมต่อ String การคัดลอก String การเปรียบเทียบ String เป็นต้น