hey.. 2morow is my exam and i badly need one program "how to copy one string from an array to another array without using String.h header file" waiting for positive responsese :disappoin :goofy: :shy:
I think what they're asking you to do is to implement your own strcpy function. If it's a day before your exam how come you don't know how to do that? Must be a very poor course you're on.
It's probably too late....yet I am posting my strcpy.... Code: #include<stdio.h> #include<conio.h> #define m 100 void my_strcpy(char a[m], char b[m]) { int i; for(i=0;i<m;i++) { b[i]=a[i]; } return; } void main() { char a[m], b[m]; printf("Enter your array\t"); scanf("%s", a); my_strcpy(a,b); printf("Copied string\t%s", b); getch(); } Please report for any inconvenience......cheers..... ---------------------- @ r k @
That's more of a memcpy function; it copies m characters regardless of what those characters are. A strcpy doesn't copy a fixed number each time, it just copies until it gets to a terminating NULL. Plus what if you want to copy an array that isn't exactly m bytes long? If it's less then you'll corrupt memory. If it's more you'll only copy part of the array.
We're way past the deadline (whichever way the date works) so try this one instead (untested): Code: void my_strcpy(char *dest,const char *src) { while (*dest = *(src++)) ; }
Well....then I will use pointers....e.g. Code: void mystrcpy(char *a, char *b) { while(*b!='\0') { *a=*b; b++; a++; } *a='\0'; } I hope this works now.....
Should have tested, dest++...d'oh! And brackets not necessary for *src++. This works, copying the string in just one line; that's why I couldn't believe the OP couldn't figure this out on the day before his exam; it must have been a really crappy programming course if it left people unable to work out a simple strcpy. Code: void go4e_38959() { char a[32]; char b[32]; char *pa; char *pb; strcpy(a,"Hello world"); pa=a; pb=b; while (*pb++=*pa++) ; // <- just bung this line in a function to meet the requirement printf("%s\n",b); }
hi i also need to solve this c++ question in my tutorial. lets say instead i have to declare the my_strcopy before my int main(void) 's body. then i will declare my array as above in the main's body. after which i pass 2 arrays into my_strcopy to copy them.. after my mainbody, i would then define my function. the question is... how do i declare the prototype before my main body? i still have a question on fflush(stdin) lets say i have Code: #include <stdio.h> #include <stdlib.h> int main(void) { int a; char name; printf("enter a number\n"); scanf("%d",&a); fflush(stdin); printf("enter a name:\n"); scanf("%s",&name); printf("a is %d, name is %c\n",a,name); system("pause"); return 0; } what is the idea of fflush(stdin)? i know it is something related to inputbuffer and inputstream but i cant figure it out... and another thing to note.. how do i store a string of letters into "name"?
hi another question. i managed to do the coding for my declaration of function and this is what i did: Code: void strcopy(char dest[], char src[4]); int main(void) { char src[]="YES", dest[]={1}; int i; strcopy(dest, src); printf("%s\n", dest); system("pause"); return 0; } void strcopy(char dest[4], char src[4]) { int i; for(i=0; i<4; i++) dest[i]=src[i]; } i actually modified to give my Code: dest[]={1}; one element of dest's array. the function still works fine. but i just want to find if my understanding is correct... like say if i bring this dest[]={1} into my function and copy with a 4element array.. it means my number of elements in dest will be able to change.
Um, no. It may appear to work fine in this simple example, but in fact the code suffers from a buffer overflow. Since you don't specify the size of dest, the compiler deduces it from what's between the braces. {1} is just one item long, so dest is actually of type char[1], which is probably the single most pointless declaration in C, because you have to use pointers and by using array terminology people would be expecting a string here, not a single character, and you only have space for a terminating NULL. If you want a single char, declare dest as "char dest;" and drop the array syntax. So dest[1..3], which are written to in strcopy REGARDLESS of the actual length of the string in src[], are not part of the dest array; they belong to someone else, and you've just overwritten their memory for them. Why are you only copying 4 bytes regardless of the size of the string in src? As I said to another poster, this is more of a memcpy function than a strcpy. strcpy should take string semantics into consideration, i.e. it should be written according to the fact that a string is a number of characters terminated with a zero byte. So the end of the copy loop should end after copying the zero byte, not after a fixed number (unless you're implementing strncpy).
Yes.....it will change I think, because you have not specified the size of dest initially....else you would have to allocate it dynamically.... Still I wait for the expert's opinion to be absolutely confirm....
Code: #include <stdio.h> void stringcopy(char *, char *); int main() { int i; char src[] = "hai this patil"; char *dest = (char*)malloc(strlen(src)+1); stringcopy(dest , src); printf("source = %s\n",src); printf("destination = %s\n",dest); } void stringcopy(char *t , char *s) { while ((*t = *s) !=0) { s++; t++; } }