หลังจากเรียนวิชา Unix Tools and Programming ไปเรียบร้อยและได้โดนสั่งงาน Project เทอมให้ทำโปรแกรม Client Server โดยมีเงื่อนไขว่า ให้ใช้ภาษา C และผมเลยติดปัญหาที่ว่า ผมต้องการติดคำในภาษา C เช่นมี ABCDEF จะเอาแค่ CDE เก็บใส่ในตัวแปรใหม่ เริ่มแรกก็ได้ลองหาว่ามี libary มีให้ใช้ไหม
เลยหาข้อมูลมาดังนี้
1. ลองหา google เห็นว่าไม่มีข้อมูล เสียเวลาประมาณ 1 วัน (หรือผมหาไม่เจอ = =)
2. ถามพี่ๆที่คณะ ก็ไม่รู้ เสียเวลาไปอีก 1 วัน
3. เลยถามพี่ๆ ใน facebook ที่จบไปแล้วว่ามันมีหรือไม่ เสียเวลาไปอีก 1 วัน
โดยได้คำตอบว่ามันไม่มีให้ใช้ และได้คำแนะนำว่าให้ลองเขียนเอง (ช่วงสอบด้วย โอ้ว แม่เจ้า !!!)
ช่วงแรกๆผมลองดูก็ Segmentation fault นั่งงมอยู่เกือบวัน ไม่ได้สักทีเลยไปอ่านหนังสือสอบก่อน
หลังจากสอบเสร็จก็กลับห้องมาลองดูอีกสักตั้ง โดยลองมั่วๆ pointer malloc char ไปเรื่อยๆ ใช้เวลาประมาณ 2 ชั่วโมง ในที่สุดผมก็ทำได้ !!!
ตัวอย่างโปรแกรม
#include <stdio.h>
#include <string.h>
char* substring(int start,int end,char data[]); //function สำหรับใช้ตัดคำ
int main()
{
char data[]="ABCDEFG",new_data[10];
char *new_data_p;
printf("data = %s \n",data); //แสดงข้อมูลก่อนที่จะตัด
new_data_p = substring(3,5,data); //ทำการตัดคำ เอาตัวอักษรที่ 3 ถึง 5
strcpy(new_data,new_data_p); //นำข้อมูลที่ตัดแล้วมาใส่ในตัวแปรตัวใหม่
printf("new_data = %s \n",new_data); //แสดงข้อมูลที่แล้ว
free(new_data); //คืนค่าหน่วยความจำให้กับ OS
return 0;
}
char* substring(int start,int end,char data[])
{
int i;
char *new_data,*current;
new_data = malloc((end-start+2) * sizeof(char)); //ทำการจองพื้นที่ในหน่วยความจำ
current = new_data;
for(i=start-1;i<end;i++) //วน loop copy ทีละตัวอักษร
{
*current = data[i];
current++;
}
*current = '\0'; //ปิด string
return new_data;
}
ลองไปศึกษาดูได้นะครับ เป็นการใช้ประโยชน์จาก Pointer ในอีกรูปแบบหนึ่ง Pointer จงเจริญ!!!

ไม่มีความคิดเห็น:
แสดงความคิดเห็น