01/10/2018, 08:25
Giúp mình function strcpy với ạ!
Hiện mình có bài tập như sau:
Sử dụng function
char* copyString(char* copy, const char* string);
và copy mảng này sang mảng kia mà ko dùng đến thư viện <string.h> cũng như strcpy
Bài liên quan
Tim doạn sủ của hàm strcpy copy vào là xong.
=.= copy mà ko cần dùng đến hàm strcpy đó, chứ dùng hàm strcpy thì quá dễ rùi ông
Tìm đoạn mã nguồn hàm strcpy copy vào trong hàm của bạnnnnnnnnnnnnnnnnnnnnnnnn
Một “chuỗi” trong C là dãy kí tự liên tiếp kết thúc bằng 0. Vậy là đủ dữ kiện rồi nhé, câu này ngắn lắm, 1 dòng
có phải “Open #include file string.h” ko ? Mình vào rồi nhưng kéo đến chổ strcpy nó không có mã nguồn cụ thể
=)) cụ thể please…
Cái XxxXx8**xx8xX8X8x.h chỉ có nguyên mẫu thooiiiiiiiiiiiiiiii.
Code
Đơn giản như vầy thôi
Tại mình không giỏi giải thích cho lắm nên đưa code luôn
PS: Trong code của mình chưa có kiểm tra mảng có bị tràn hay không. Cái này dễ, bạn tự làm nha!
Nên thảo luận vào vấn đề chứ đừng đưa code ngay nhé bạn.
là gì vậy bạn ? Mình ko hiểu lắm
Đêm ko ngủ được buồn lướt qua mấy câu hỏi của bạn, ngồi làm cho dễ ngủ, có sai xót mong các bạn góp ý
#include <stdio.h>
#include <stdlib.h>
#define max 100
char *copystring ( char *copy,const char string)
{ int i;
copy =(char)malloc(strlen(string)*sizeof(char));
for(i=0;i<strlen(string);i++)
copy[i]=string[i];
copy[i]=’\0’;
return copy;
}
void main()
{
char str1[max]=“Chuoi ban dau nhe”;
char str2[max]="";
printf("\n Hien thi chuoi sau khi copy:%s",copystring(str2,str1));
}
Xài
strlen
cũng như không.Cách reply của bạn thật đi vào lòng người đó rogp10: cho hỏi bạn có góp ý gì có thể nói rõ hơn ko
Bạn thử với scanf("%[^8]", string1); - kết thúc nhập chuỗi = cách nhập số 8 sau đó ân enter
Bạn thử với scanf("%[^\n]", string1);- kết thục nhập chuỗi sau khi nhập ký tự xuống dòng (enter)
Bạn thử với scanf("%[^\a]", string1);- kết thục nhập chuỗi sau khi nhập vào ký tự a (enter)
Muốn pro thì bạn đọc 2 quyển A Step in Programming with C, và Program in C Stephen Kochan third Edition, trong 2 cuốn này có ghi cụ thể từ A-Z .
Mình đã reply lâu rồi mà.
Cám ơn bạn đã chia sẽ các làm
Mình ko hiểu đoạn code này của bạn cho lắm
copy =(char*)malloc(strlen(string)*sizeof(char));
À tiêu đề mình đăng mình nói thiếu là không dùng các hàm trong <string.h> :)) nghĩa là ko dùng strlen bạn ơi
OK, bạn ơi có thể cho mình thông tin liên lạc riêng mà bạn thường hoạt động nhất ví dụ như facebook để mình tiện hỏi bạn về 2 quyển sách đó nhé. Cám ơn những chia sẽ quý báu của bạn
Hàm này có vẻ hơi thừa, mình viết chơi thui. Hàm này được gọi là Hàm cấp phát bộ nhớ động
Ý nghĩa: copy =(char*)malloc(n*sizeof(char));
Tạo cấp phát cho con trỏ copy để lưu dữ liệu kiểu kiểu char, có kích thước là n * kích thước độ dài kiểu dữ liệu char sizeof(char) = 1byte: vì dữ liệu kiểu char có độ dài là 1 byte, vậy tổng sẽ là n byte được tạo ra.
Ví dụ 1 bài cơ bản: máy tính sẽ tạo ra 1 mảng p[n] để chứa n phần tử dạng (int) với n được nhập từ bàn phím, thay vì cứ khai báo kiểu p[100], hoac p[1000] làm tốn bộ nhớ. với kiểu dùng malloc là khi nào cần, và cần bao nhiêu thì cấp phát bấy nhiêu . Cái này là kiến thức căn bản bạn phải tự tìm hiểu thì mới giỏi lên được, chứ đùng cái gì cũng chờ các bạn khác giải thích chi tiết quá. Thân ái
include<stdio.h>
include<conio.h>
void nhap( int *a, int n)
{
int i;
for(i=0;i<n;i++)
{ printf("\np[%d]=",i);
scanf("%d",&a[i]);
}
}
void xuat(int *a, int n)
{
puts("\nIn ra mang vua nhap:");
int i=0;
for( ; ; )
{
printf("\tp[%d]= %d",i,a[i]);
}
}
main()
{
int p; int n;
printf("\n Nhap so phan tu cua mang cac so nguyen n= “);
scanf(”%d",&n);
p=(int)malloc(n*sizeof(int));
nhap(p,n);
xuat(p,n);
}
Mình cũng bon chen cho vui (mặc dù bài này hơi dễ). Nhưng bạn @ntbac không biết là diễn đàn hạn chế những người hỏi bài tập à? Bài tập này không có gì gọi là thách đố cả nó chỉ bám sát kiến thức của bạn về chuỗi trong C (và 1 chút hiểu biết về con trỏ hehe).
Sau đây là code, vì thông tin của bạn @rogp10 là quá đủ cho bài toán này nên mình hy vọng bạn tự tư duy cho đáp án bài tập này, click vào code bên dưới chỉ chứng tỏ sự dễ dãi với bản thân, thiếu tính chủ động tìm hiểu và tư duy sáng tạo. Có thể code của bạn hơi dài và hơi “không sạch” nhưng nó giúp bạn hiểu được cách hoạt động của hàm này (và kết quả kéo theo là bạn “lĩnh hội” được nhiều thứ, tin mình đi, nó cực vui nếu bạn tự làm).
__edoc-deoc-odec-code__
Ngắn gọn và không có gì gọi là phức tạp, đúng không?
Lưu ý: mình chỉ dùng 1 dấu
=
thôi nhé, và đó là gán, không phải so sánh Đừng hỏi mình về nó hoạt động thế nào vì mình không thi giùm và tốt nghiệp giúp bạn được :’(Hàm này chỉ làm 1 công việc duy nhất là copy string, còn chuyện xét về tràn bộ nhớ hay các vấn đề gì khác thì không thuộc phận sự của hàm này. Test cases cho hàm này chỉ là copy string thành công từ mảng này sang mảng khác và có số bytes được copy vào nhỏ hơn hoặc bằng kích thước của mảng đã khai báo. Việc bạn sử dụng test case(s) gây ra lỗi segmentation fault,… thì không phải lỗi của hàm Yeah.
strcpy
trả về con trỏ là để chain không phải để tạo “string” nhé.