命令行參數 argc=3 (程式名 + 2 學生)。標準輸入讀取姓名,動態分配二維陣列存儲,輸出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 30
int main(int argc, char* argv[]) {
if (argc < 3) {
fprintf(stderr, "Usage: %s \n", argv[0]);
return 1;
}
int n = atoi(argv[1]);
if (n < 2) { fprintf(stderr, "Students must be > 2\n"); return 1; }
char** names = malloc(n * sizeof(char*));
for (int i = 0; i < n; i++) {
names[i] = malloc(MAX_LEN + 1);
printf("Enter name %d: ", i+1);
scanf("%30s", names[i]); // 無空格
}
printf("\nNames:\n");
for (int i = 0; i < n; i++) {
printf("%s\n", names[i]);
free(names[i]);
}
free(names);
return 0;
}
argv[1] 為學生數,argv[0] 為程式名。char** 模擬二維陣列,每行獨立 malloc。scanf("%30s") 限制長度防溢出,姓名不含空格。free 釋放,先釋放行再釋放指針陣列。