Κοιτα αμα καταφερω και φτιαξω αρχικα την strcpy μετα να προσθεσεις ενα n ειναι ευκολο.
Συντονιστής: konnn

Star_Light έγραψε:
...
Κοιτα αμα καταφερω και φτιαξω αρχικα την strcpy μετα να προσθεσεις ενα n ειναι ευκολο.

#include<stdio.h>
//char *f_cp(char *ptr[2],char *ptr2[2]);
int main()
{
char *ptr[2]={"ABaaaaa","BAaaaaaaaa"};
char *ptr2[2];
int i;
for(i=0; i<2; i++)
{
ptr2[i]=ptr[i];
printf("%s", ptr2[i]);
}
return 0;
}

int *ptr[2]={1,2,3} ;
=============================================================
ptr[0] ptr[1] ptr[2]
=============================================================
| | |
| | |
| | |
=============================================================
1 2 3
=============================================================

int main( void )
{
char src[15+1] = "12345"; // μέγιστο μήκος 15+1, τρέχον μήκος 5+1
char dst[15+1] = ""; // μέγιστο μήκος 15+1, τρέχον μήκος 0+1
...
return 0;
}
void s_copy( char *dst, char *src )
{
register int i = 0;
while ( src[i] != '\0' )
{
dst[i] = src[i];
i++;
}
return;
}
...
printf( "Before: dst = %s, src = %s\n", dst, src );
s_copy( dst, src );
printf( "After : dst = %s, src = %s\n", dst, src );
...
Before: dst = , src = 12345
After : dst = 12345, src = 12345
char *s_copy( char *dst, char *src )
{
register int i = 0;
while ( src[i] != '\0' )
{
dst[i] = src[i];
i++;
}
return dst;
}
...
printf( "Before: dst = %s\n", dst );
printf( "After : dst = %s\n, s_copy( dst, src) );
...
Before: dst =
After : dst = 12345
...
// Before
puts( dst );
// After
puts( s_copy( dst, src) );
...
12345
char *s_copy( char *dst, char *src )
{
register int i = 0;
while ( (dst[i] = src[i]) != '\0' ) // το = είναι ανάθεση και όχι έλεγχος ισότητας
{
i++;
}
return dst;
}
char *s_copy( char *dst, char *src )
{
register int i = 0;
while ( (dst[i] = src[i++]) ) // το = είναι ανάθεση και όχι έλεγχος ισότητας
;
return dst;
}
char *s_copy( char *dst, char *src )
{
char *save = dst;
while ( *src != '\0' )
{
*dst = *src;
src++;
dst++;
}
return save;
}
char *s_copy( char *dst, char *src )
{
char *save = dst;
while ( (*dst++ = *src++) ) // το = είναι ανάθεση και όχι έλεγχος ισότητας
;
return save;
}



}else {
for(;i < n;i++) {
destination[i] = 0;
}
destination[i+1] = '\0';
return destination;
}

migf1 έγραψε:Δες κι αυτό εδώ:
- Κώδικας: Επιλογή όλων
}else {
for(;i < n;i++) {
destination[i] = 0;
}
destination[i+1] = '\0';
return destination;
}
Αν το n ισούται με το μέγιστο μήκος του destination (π.χ. char destination[4] = ""; int n = 4; ) τότε μέσα στο loop μηδενίζεις μέχρι το destination[3] που είναι ο 4ος και τελευταίος χαρακτήρας του destination κι αμέσως μετά το loop που το i ισούται με 4 (για αυτό σταμάτησε το loop) πας και μηδενίζεις με εκείνο το [i+1] και τον destination[4+1] χαρακτήρα... δηλαδή τον destination[5]... αλλά ο τελευταίος χαρακτήρας που μπορεί να περιέχει το μέγιστο μήκος του destination σύμφωνα με τον ορισμό του είναι ο destination[3]... άρα πας και μηδενίζεις το 2ο byte μετά το τέλος του destination στη μνήμη.

