หลังจากเรียนวิชา 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 จงเจริญ!!!
ไม่มีความคิดเห็น:
แสดงความคิดเห็น