הנדסה אזרחית & הנדסה מבנית
כיצד להשתמש בספריית C סטנדרטית כדי להגביר את הקוד שלך
Table of Contents
ספריית C Standard Library
ספריית C סטנדרטית היא אוסף של פונקציות, מאקרו והגדרות מסוג המסופקות כחלק מתקן שפת התכנות ISO C. זה נותן למפתחים בסיס נייד, נבדק היטב למשימות נפוצות כגון קלט / טבילה, טיפול מיתר, הקצאת זיכרון, חישוב מתמטי ותאריך / מניפולציות זמן.על ידי הסתמכות על הספרייה הסטנדרטית במקום לכתוב פתרונות מותאמים אישית, אתה להפחית באגים, לשפר את יכולת לקרוא, להבטיח את ההתנהגות שלך באופן עקבי תוכניות מתאר ובאופן עקבי על פני פלטפורמות מדפים שונים ובאופן עקבי ובאופן עקבי.
הספרייה מאורגנת במספר קבצים ראשיים, כל אחת מהפונקציונליות הקשורה לקבוצה.הבנת מה שכל ראש מציע הוא הצעד הראשון לכתיבת קוד C יעיל ושמירה על יעילות ותפקודי הליבה שלהם, יחד עם דוגמאות מעשיות המוכיחות כיצד הם מפשטים את התכנות היומיומי.
ראשי ממשלה ותפקידים שלהם
וידוי: אידיוט ו-gt; Input and Output
ראש ה-FLT:0 מספק פונקציות לקריאה וכתיבה לזרםים סטנדרטיים (בדין, סטדוט, סטדר) וקבצים.בלעדיו, תצטרך ליישם שיחות מערכת ברמה נמוכה או לכתוב את השכבת השחיקה שלך.
- (ב) ויקרא י"ד:2 ויקרא י"ד): "וַיְהִיא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא .
- (ב) ויקרא י"ד:2 ויקרא:2 ויקרא י"ד): "וַיָּבְהִיתִי עַל הָאָרֶץ" (בראשית כ"ד).
- (ב) ויקרא:5 ויקרא:5 ויקרא:2 ויקרא:2 ויקרא:2 ויקרא יט:2 ויקרא ויקרא יט ויקרא יט:2 ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ויקרא י"ד:2 ויקרא י"ד): "וַיְהִיא עַמְתָּבָר" (בראשית כ"ד, כ"ד).
- (ב) ויקרא י"ד:2 ויקרא י"ד:2 ויקרא י"ד:
(ב) ויקרא (במדבר כ"ד): "ה' (ב)' (ב')' (ב')'' (ב')', ב')' (ב')', ב'')', ב''''', ב'''')'.
#include <stdio.h>
int main() {
char buffer[100];
printf("Enter a line: ");
if (fgets(buffer, sizeof(buffer), stdin)) {
printf("You entered: %s", buffer);
}
return 0;
}
אנגלית: all Utilities
(FLT:13) כולל פונקציות להקצאת זיכרון דינמי, דור מספר אקראי, בקרת תהליכים, והמרות. אלה חיוניים לתוכניות הדרושות כדי להקצות זיכרון בזמן ריצה או לבצע פעולות ברמת המערכת.
- (ב) ויקרא י"ד:2 ויקרא י"ד:2 ויקרא י"ד: ויקרא י"ד ויקרא י"ד , ויקרא י"ד , ויקרא י"ד:5 ).
- (ב) ויקרא י"א:2 ויקרא י"ד:2 ויקרא י"ד:
- [[1924]]]]]] [[1924]]]]]]]]]] [[1924]]]]]]
- (ב) ויקרא י"ד:2 ויקרא י"ד:2 ויקרא יט:
- (ב) ויקרא י"א: ויקרא י"ד: ויקרא י"ד:
- (ב) ויקרא י"ד: ויקרא י"ד: "ה' אלקים" (בראשית כ"ד)
(ב) ויקרא י"א): "ה', כ"כ," (ב)" (ב"ב)" (ב"ב) "ב"ה', "ה') הוא הרבה יותר פשוט מאשר לכתוב את השגרה שלך:
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int arr[] = {42, 3, 71, 1, 9};
size_t n = sizeof(arr) / sizeof(arr[0]);
qsort(arr, n, sizeof(int), compare);
for (size_t i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
וידוי: string.h > - פעילות של זיכרון וזיכרון
עבודה עם C מיתרים (מערךים ארוכי טווח של דמויות) היא שגיאה ללא הספרייה הסטנדרטית.FLT:29 מספק פונקציות בטוחות ויעילות עבור העתקה, הדבקה, השוואת וחיפוש מיתרים, כמו גם פעולות חסימת זיכרון.
- [[1924]]]]]] [[1924]]]]]]]]]] [[1924]]]]]]
- [[1924]]]]]] [[1924]]]]]]]]]] [[1924]]]]]]
- (ב) ויקרא י"א:2 ויקרא י"ד): "וַיָּבְהִיתִיתִיא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא .
- (ב) ויקרא י"ד: "ה' יברך" (בראשית כ"ד, כ"ד).
- (ב) ויקרא י"א:2 ויקרא י"ד:2 ויקרא י"ד:
- (ב) ויקרא י"ד:2 ויקרא י"ד:2 ויקרא י"ד: ויקרא י"ד:2 ויקרא יט:2 ויקרא יט:5 ).
- (ב) ויקרא י"ד: "ה' אלקים" (ב)
(ב) ,0) ,4 ,2 מחרוזת:
#include <stdio.h>
#include <string.h>
int main() {
char dest[20] = "Hello, ";
const char *src = "World!";
strncat(dest, src, sizeof(dest) - strlen(dest) - 1);
printf("%s\n", dest);
return 0;
}
אנגלית:mathh > פונקציות מתמטיות
(ב) ליישומים מדעיים והנדסה, (FLT:45) מספק פונקציות צף כמו LT:46, ⁇ , (FLT:48 ,FLT:49 ,FLT:49 , ; ; ; ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (ב) ויקרא י"ד: "ה' ויקרא י'" (בראשית כ"ד, כ"ד).
- (ב) ויקרא י"א:2 ויקרא י"ד:2 ויקרא י"ד:
- (ב) ויקרא י"ד:2 ויקרא י"ד): "וַיְהִיא עַמֶּה הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא הוּא .
- (ב) ויקרא י"א: "ה' (ב)" (בראשית כ"ד)
- [[1924]]]]]] [[1924]]]]]]]]
(ב) ⁇ :0) , ⁇ (ב) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
#include <stdio.h>
#include <math.h>
int main() {
double x1 = 1.0, y1 = 2.0, x2 = 4.0, y2 = 6.0;
double dx = x2 - x1, dy = y2 - y1;
double distance = sqrt(dx*dx + dy*dy);
printf("Distance: %.2f\n", distance);
return 0;
}
וידוי: ctype.h > Character Handling
(ב) ,[[1924]] ו[[1924]]]], [[1924]]]], [[1924]]]], [[1924]]]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]
(ב) ויקרא י"א: ויקרא י"ד:
#include <stdio.h>
#include <ctype.h>
int main() {
char str[] = "Hello, World!";
for (int i = 0; str[i]; i++)
str[i] = toupper(str[i]);
printf("%s\n", str);
return 0;
}
« זמן; זמן ושעה;
(FLT:67) מספק פונקציות כדי לקבל את הזמן הנוכחי, למדוד זמן מחלף, ותאריך פורמט / מחרוזת זמן. שימושי עבור כניסה, פרופיל ותזמון.
- (ב) ויקרא י"ד: ויקרא י"ד: "ה' י"ד: ויקרא י"ד:
- (ב) ויקרא י"א: ויקרא י"ד: ויקרא י"ד:
- (ב) ויקרא י"ד: ויקרא י"ד: "הבדל בין שני ערכי זמן".
- (ב) ויקרא י"ד: ויקרא י"ד: "ה' ויקרא כ' ויקרא כ' יט" (בראשית כ"ד).
- (ב) ויקרא י"ד:2 ויקרא י"ד:2 ויקרא:2 ויקרא: יט): "ויאמרו [ב]: ויקרא י': ויקרא י': ויקרא י': ויקרא י':
(ב) עיין ב[[1924]]: [[1924]]]]
#include <stdio.h>
#include <time.h>
int main() {
time_t t = time(NULL);
struct tm *tm_info = localtime(&t);
char buffer[26];
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", tm_info);
printf("Current time: %s\n", buffer);
return 0;
}
דוגמאות מעשיות לכך מראות את הכוח של הספרייה הסטנדרטית
לקרוא קובץ בטוח
קריאת קו קובץ טקסט לפי קו היא דרישה נפוצה, שימוש ב-FLT:75 מונע buffer overflow, ו-FLT:76/FLT:77 מטפל בתנאי קצה וטעייה.
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp = fopen("data.txt", "r");
if (!fp) {
perror("fopen");
return EXIT_FAILURE;
}
char line[256];
while (fgets(line, sizeof(line), fp)) {
printf("%s", line);
}
if (ferror(fp))
perror("fgets");
fclose(fp);
return 0;
}
קרינת דינמי של סטרינגס
(הופנה מהדף ההרחבה של מחרוזת (כל אורך משתנה) דורש זיכרון דינמי (הרש"י:79), ההרחבה:80, ו-FLT:81 (אם זמין) מפשט את התהליך: Note: (FLT:82 אינו פונקציה ISO C אך נתמך באופן נרחב; ניתן גם להשתמש ב-FLT:83 +FLT:84:84:84: 8)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *words[] = {"apple", "banana", "cherry", "date"};
size_t num_words = sizeof(words) / sizeof(words[0]);
// Allocate array of char pointers
char **copy = malloc(num_words * sizeof(char*));
if (!copy) return EXIT_FAILURE;
for (size_t i = 0; i < num_words; i++) {
copy[i] = malloc(strlen(words[i]) + 1);
if (copy[i])
strcpy(copy[i], words[i]);
}
// Print and free
for (size_t i = 0; i < num_words; i++) {
printf("%s\n", copy[i]);
free(copy[i]);
}
free(copy);
return 0;
}
היתרונות של שימוש בספריית C Standard
- (FLT:0)Portability:BuildFLT:1) קוד שנכתב נגד ספריה סטנדרטית מאגד ומנוהל על כל פלטפורמה מתאימה (חלונות, לינוקס, macOS, מערכות משובצות).
- (FLT:0) תיקון: פונקציות הספרייה של ראטפל:1 נבדקות בקפידה ולטפל במקרים (כמו נקודות אפס, מחרוזת ריקה וזרימה) טוב יותר מאשר יישומים רבים.
- (FLT:0)Performance:FLT:1 יישום ספריה סטנדרטית הם לעתים קרובות אופטימיזציה עבור חומרה היעד, באמצעות טכניקות כמו אינסטלינג, טבלאות תצוגה, הוראות חומרה.
- (ב) ויקרא: ויקרא: ויקרא: ויקרא: ויקרא: ויקרא י': ויקרא י"ד: ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
- (FLT:0) שימורים: 1.FLT:1 Libraries מתפתחים עם תקן.הדרגת מפרש או פלטפורמה עשויה לשפר באופן אוטומטי את תפקוד הספרייה מבלי לגעת בקוד שלך.
ההליכים הטובים ביותר והמלכודות הנפוצות
תמיד לבדוק את ערכי החזרה
(ב) ,7 , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
FILE *fp = fopen("nonexistent.txt", "r");
if (!fp) {
perror("fopen");
return EXIT_FAILURE;
}
תכונות נוספות
(ב) ,ב[[1948]] ו[[1948]], [[1948]], [[1948]], [[1948]], [[1924]]]]]], [[1924]]]]]]]], [[1924]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]
char buf[10];
snprintf(buf, sizeof(buf), "%s", "Hello, World!"); // safely truncated
חינם כל זיכרון דינמי
כל אחד מהם (FLT:97) או FLT:98 חייב להיות תואם (FLT:99 כלים כמו Valgrind או הכתובת Sanitizer כדי לזהות דליפות זיכרון.
להיות מודע ל Reentrancy
חלק מהספרייה הסטנדרטית (למשל, FLT:100, ⁇ :101) משתמשת במצב סטטי פנימי ולא בטוחה בתוכנות מרובות-הנקראות, מעדיפה גרסאות רכות כמו FLT:102 או FLT:103.
משאבים נוספים
כדי להעמיק את ההבנה של ספריית C Standard, להתייעץ עם הפניות סמכותיות:
- (ב) ◄0 (ב) ,C סטנדרטי Library HeadersFLT)
- שם הספר בלועזית :0.2017 GLO C Library Reference
- (ב) ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
מסקנה
ספריית C סטנדרטית היא כלי חיוני עבור כל מתכנת C. על ידי שליטה בראשים ובפונקציות שלה, אתה יכול לכתוב קוד קצר יותר, בטוח יותר, ונייד יותר. במקום להמציא מרכיבים בסיסיים, אתה יכול להתמקד בלוגיקה שהופך את היישום שלך ייחודי. כפי שאתה ממשיך להתפתח ב C, לעשות הרגל של לבדוק הראשון אם הספרייה הסטנדרטית כבר פותרת את הבעיה שלך - זה בדרך כלל עושה, ועושה עם עשרות שנים של חוכמה קולקטיבית אפוי.