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

Tao Không Ngu. viết 10:27 ngày 01/10/2018

Tim doạn sủ của hàm strcpy copy vào là xong.

ntbac.1dream@gmail.com viết 10:26 ngày 01/10/2018

=.= copy mà ko cần dùng đến hàm strcpy đó, chứ dùng hàm strcpy thì quá dễ rùi ông

Tao Không Ngu. viết 10:27 ngày 01/10/2018

Tìm đoạn mã nguồn hàm strcpy copy vào trong hàm của bạnnnnnnnnnnnnnnnnnnnnnnnn

rogp10 viết 10:34 ngày 01/10/2018

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

ntbac.1dream@gmail.com viết 10:25 ngày 01/10/2018

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ể

ntbac.1dream@gmail.com viết 10:40 ngày 01/10/2018

=)) cụ thể please…

Tao Không Ngu. viết 10:29 ngày 01/10/2018

Cái XxxXx8**xx8xX8X8x.h chỉ có nguyên mẫu thooiiiiiiiiiiiiiiii.

Nguyễn Tấn Khoa viết 10:31 ngày 01/10/2018
Code
#include <stdio.h>

char* copyString(char* copy, const char* string)
{
	int element = 0;
	
	while (string[element] != '\0')
	{
		copy[element] = string[element];
		element++;
	}
	return copy;
}

int main(void) {
	char string1[32] = {};
	char string2[32] = {};
	
	scanf("%[^\n]", string1);
	
	copyString(string2, string1);
	
	printf("%s", string2);
	
	return 0;
}

Đơ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!

Người bí ẩn viết 10:31 ngày 01/10/2018

Nên thảo luận vào vấn đề chứ đừng đưa code ngay nhé bạn.

ntbac.1dream@gmail.com viết 10:38 ngày 01/10/2018

^\n

là gì vậy bạn ? Mình ko hiểu lắm

Son Dang viết 10:38 ngày 01/10/2018

Đê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));
}

rogp10 viết 10:39 ngày 01/10/2018

Xài strlen cũng như không.

Son Dang viết 10:38 ngày 01/10/2018

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

Son Dang viết 10:31 ngày 01/10/2018

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 .

rogp10 viết 10:28 ngày 01/10/2018

Mình đã reply lâu rồi mà.

Một “chuỗi” trong C là dãy kí tự liên tiếp kết thúc bằng 0

ntbac.1dream@gmail.com viết 10:34 ngày 01/10/2018

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

ntbac.1dream@gmail.com viết 10:28 ngày 01/10/2018

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

Son Dang viết 10:32 ngày 01/10/2018

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]);

i++;
if ( i==n ) break;

}
}
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);
}

Khoa NTA viết 10:32 ngày 01/10/2018

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__
char *copyString(char *copy, const char *string) {
	while(*(copy++) = *(string++));
	return copy;
}

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.

rogp10 viết 10:31 ngày 01/10/2018

strcpy trả về con trỏ là để chain không phải để tạo “string” nhé.

Bài liên quan
0