下面的代碼崩潰的代碼試圖保存scanf()
輸入的地方通過username
指出,但username
未初始化。
char *username;
scanf("%s", &username); // bad
相反,可以使用
char username[100];
scanf("%99s", username);
或者更好
char username[100];
fgets(username, sizeof username, stdin);
username[strcspn(username, "\n")] = '\0'; // lop off potential \n
它出現OP想要一個50×7指針數組來分配,如C字符串string[,] array = new string[50,7];
召回在C,一個字符串本身就是一個字符數組以空字符
#include <stdlib.h>
typedef char *a50_7_T[50][7];
a50_7_T *a50_7_alloc(void) {
a50_7_T *a = malloc(sizeof *a);
for (int i=0; i<50; i++) {
for (int j=0; j<7; j++) {
(*a)[i][j] = NULL; // or whatever OP wants as initial state
}
}
return a;
}
void a50_7_free(a50_7_T *a) {
for (int i=0; i<50; i++) {
for (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結束,如果OP要創建數組作爲聲明的一部分,也就是在正確的軌道上什麼OP。
// Initialize all to zeros, (NULL)
char *array[50][7] = { 0 };
...
array[0][0] = strcpy(malloc(6), "Hello");
...
free(array[0][0]);
@Sinatr'串[,]'是矩形陣列,而不是鋸齒狀的。 –
你可以創建一個'std:string'的二維數組。 –
@MthetheWWatson它不會在C. –