c# - string[,] array of string arrays equivalent in C -
in c#, if create array of string arrays easy doing:
string[,] array = new string[50,7];
how go doing in c? understand should make use of pointers have come doesn't seem work properly.
char *array[50][7];
please note i'm not looking set elements constant values, need able access them/set them in program again either means of using scanf()
function or =
if possible. simplest way of achieving this?
edit: doing wrong here? following simple example crashes program:
char *username; printf("username: "); scanf("%s", &username); array[0][0] = malloc(strlen(username) + 1); strcpy(array[0][0], username);
i have, in fact, added reference stdlib.h
the following code crashes code attempting save scanf()
input place pointed username
, yet username
not initialized.
char *username; scanf("%s", &username); // bad
instead, use
char username[100]; scanf("%99s", username);
or better
char username[100]; fgets(username, sizeof username, stdin); username[strcspn(username, "\n")] = '\0'; // lop off potential \n
it appear op wants 50 x 7 array of pointers c strings allocated in string[,] array = new string[50,7];
recall, in c, string character array ending null character
#include <stdlib.h> typedef char *a50_7_t[50][7]; a50_7_t *a50_7_alloc(void) { a50_7_t *a = malloc(sizeof *a); (int i=0; i<50; i++) { (int j=0; j<7; j++) { (*a)[i][j] = null; // or whatever op wants initial state } } return a; } void a50_7_free(a50_7_t *a) { (int i=0; i<50; i++) { (int j=0; j<7; j++) { free((*a)[i][j]); } } free(a); } // sample usage code #include <string.h> void foo(void) { a50_7_t *a = a50_7_alloc(); printf("size %zu\n", sizeof *a); // e.g. "size 1400" (*a)[0][0] = strcpy(malloc(6), "hello"); a50_7_free(a); }
otoh if op want create array part of declaration, op did on right track.
// initialize zeros, (null) char *array[50][7] = { 0 }; ... array[0][0] = strcpy(malloc(6), "hello"); ... free(array[0][0]);
Comments
Post a Comment