Δεν έκανα λάθος αναθέσεις τελικά. Απλά περνούσα λάθος argument στην printf().
Αντί για:
- Κώδικας: Επιλογή όλων
printf("%s\n", *z);
Πρέπει να γίνει:
- Κώδικας: Επιλογή όλων
printf("%s\n", z);
Συντονιστής: konnn
printf("%s\n", *z);printf("%s\n", z);

#include <stdio.h>
#include <stdlib.h>
#define MAXELEMS 9
#define MAXINPUT (255+1)
#define ERR_INTERNAL(msg) \
printf( "*** %s(): %s\n", __func__, (msg) ? (msg) : "Internal error!" )
/* ----------------------------------------------------------- */
void arr_sort_insertion( int *arr, int nelems )
{
int j;
/* sanity check */
if ( !arr || nelems < 2 || nelems > MAXELEMS ) {
ERR_INTERNAL( "invalid array or invalid array length!" );
return;
}
/* do the sorting */
for(int i=1; i < nelems; i++)
{
int key = arr[i];
j = i-1;
while (key < arr[j] && j >=0 )
{
arr[ j+1 ] = arr[j];
j = j-1;
}
arr[ j+1 ] = key;
}
}
/* ----------------------------------------------------------- */
void arr_print( const int *arr, int nelems )
{
/* sanity check */
if ( !arr || nelems < 1 || nelems > MAXELEMS ) {
ERR_INTERNAL( "invalid array or invalid array length!" );
return;
}
/* do the printing */
for (int i=0; i < nelems; i++)
printf( "%d ", arr[i] );
putchar('\n');
return;
}
/* ----------------------------------------------------------- */
void arr_get_elements( int *arr, int nelems )
{
char input[ MAXINPUT ] = {'\0'};
/* sanity check */
if ( !arr || nelems < 1 || nelems > MAXELEMS ) {
ERR_INTERNAL( "invalid array or invalid array length!" );
return;
}
for (int i=0; i < nelems; i++ ) {
printf( "Element #%d: ", i );
fgets( input, MAXINPUT, stdin );
arr[i] = atoi(input);
}
return;
}
/* ----------------------------------------------------------- */
int asklength( void )
{
int ret = 0;
char input[ MAXINPUT ] = {'\0'};
printf( "Give array length (2 - %d): ", MAXELEMS );
fgets( input, MAXINPUT, stdin );
ret = atoi(input);
return ret < 2 || ret > MAXELEMS ? 0 : ret;
}
/* ----------------------------------------------------------- */
int main( void )
{
// int array[ MAXELEMS ] = {2,4,6,8,9,1,5,3,7};
int *array = NULL;
int nelems;
/* get length from user */
while ( 0 == (nelems = asklength()) )
; /* void */
/* create the array */
if ( NULL == (array = calloc(nelems, sizeof(int)) ) ) {
ERR_INTERNAL("out of memory!");
exit( EXIT_FAILURE );
}
/* fill-in the array from the user & print it */
arr_get_elements( array, nelems );
arr_print( array, nelems );
/* sort the array & print it */
arr_sort_insertion( array, nelems );
arr_print( array, nelems );
free( array );
system("pause"); /* windows only */
exit( EXIT_SUCCESS );
}

#include <stdio.h>
#define N 3
int main(void)
{
char table[N][100] = {"abc", "def", "ghi"};
int i;
for (i = 0; i < N; i++)
printf("%s\n", table[i]);
return 0;
}
#include <stdio.h>
#define N 3
#define STRINGLEN 100
int main(void)
{
char table[N][STRINGLEN] = {"abc", "def", "ghi"}, *p;
for (p = table[0]; p <= table[N-1]; p += STRINGLEN)
printf("%s\n", p);
return 0;
}

Ilias95 έγραψε:Υπάρχει κάποια καλύτερη λύση;
for ( sp = months; *sp; sp++ )
...

#include <stdio.h>
int main( void )
{
char *sarr[] = { "abc", "defghi", "jk", "lmnopqrstu", "v", "wxyz", NULL };
for (char **sp = sarr; *sp; sp++ )
printf( "%s\n", *sp );
return 0;
}


Ilias95 έγραψε:Θα δω σε λίγο το παράδειγμα στο insomnia.
Πάντως το τελευταίο παράδειγμα που ποσταρες εδώ χρησιμεύει μόνο όταν δεν σκοπεύουμε μελλοντικά να προσθέσουμε/αφαιρέσουμε strings στην sarr.

migf1 έγραψε:σε στατικά ορισμένους πίνακες.
*sarr[] = ...char sarr[20][100] = { "abc", "defghi", "jk", "lmnopqrstu", "v", "wxyz", NULL };
