user-0 提问: 有关C语言二维指针的求助

回复:
user: user-0
content: 引用 8 楼 636f6c696e 的回复：推荐的做法是二维指针再申请指针，后进行字符串拷贝： for (i = 0; i < 3; i++) {     //Line[0].s[i] = a[i];     Line[0].s[i] = malloc(strlen(a[i]) + 1);     strcpy(Line[0].s[i], a[i]); }谢谢，我也是刚接触二维指针，想尝试着用用

user: user-1
content: 推荐的做法是二维指针再申请指针，后进行字符串拷贝： for (i = 0; i < 3; i++) {     //Line[0].s[i] = a[i];     Line[0].s[i] = malloc(strlen(a[i]) + 1);     strcpy(Line[0].s[i], a[i]); }

user: user-1
content: 补充下，不建议函数返回一个局部变量地址给外部使用，函数返回后可能会释放栈内存，你在外面使用可能会出问题 引用 6 楼 ClaudeWax 的回复:[quote=引用 5 楼 636f6c696e 的回复：]参考： #include<stdio.h> #include<stdlib.h> #include<string.h>  typedef struct { char **s; } Me;  Me Line[1];  void init() { char *a[] = { "123","2345","34567"}; Line[0].s = malloc(sizeof(char *) *3); int i; for (i = 0; i < 3; i++)     Line[0].s[i] = a[i]; }  int main() { init(); int i; for (i = 0;i < 3;i++) { printf("%s\n", Line[0].s[i]); } system("pause"); } [quote=引用 4 楼 ClaudeWax 的回复:] [quote=引用 3 楼 雾夕miku 的回复：]#include<stdio.h> #include<stdlib.h> #include<string.h>  typedef struct  {     char ** s; }me;  me miku[1];  void init() {     char *p="123";     miku[0].s=p; }  int main() {     init();     printf("%s",miku[0].s);     system("pause"); } 这样不要for，好像也可以吧。萌新一枚\(//∇//)\我这里123是随便写的，其实应该是几十个长度不一的字符串，功能是希望根据s[i]输出不同位置的字符串。不过还是谢谢你提供了一种新的思路[/quote][/quote]一针见血，起初我尝试给s分配空间但并没有成功，应该是我只分配了一个空间的缘故。感谢[/quote]

user: user-0
content: 引用 5 楼 636f6c696e 的回复：参考： #include<stdio.h> #include<stdlib.h> #include<string.h>  typedef struct { char **s; } Me;  Me Line[1];  void init() { char *a[] = { "123","2345","34567"}; Line[0].s = malloc(sizeof(char *) *3); int i; for (i = 0; i < 3; i++)     Line[0].s[i] = a[i]; }  int main() { init(); int i; for (i = 0;i < 3;i++) { printf("%s\n", Line[0].s[i]); } system("pause"); } [quote=引用 4 楼 ClaudeWax 的回复:] [quote=引用 3 楼 雾夕miku 的回复：]#include<stdio.h> #include<stdlib.h> #include<string.h>  typedef struct  {     char ** s; }me;  me miku[1];  void init() {     char *p="123";     miku[0].s=p; }  int main() {     init();     printf("%s",miku[0].s);     system("pause"); } 这样不要for，好像也可以吧。萌新一枚\(//∇//)\我这里123是随便写的，其实应该是几十个长度不一的字符串，功能是希望根据s[i]输出不同位置的字符串。不过还是谢谢你提供了一种新的思路[/quote][/quote]一针见血，起初我尝试给s分配空间但并没有成功，应该是我只分配了一个空间的缘故。感谢

user: user-1
content: 参考： #include<stdio.h> #include<stdlib.h> #include<string.h>  typedef struct { char **s; } Me;  Me Line[1];  void init() { char *a[] = { "123","2345","34567"}; Line[0].s = malloc(sizeof(char *) *3); int i; for (i = 0; i < 3; i++)     Line[0].s[i] = a[i]; }  int main() { init(); int i; for (i = 0;i < 3;i++) { printf("%s\n", Line[0].s[i]); } system("pause"); } 引用 4 楼 ClaudeWax 的回复:[quote=引用 3 楼 雾夕miku 的回复：]#include<stdio.h> #include<stdlib.h> #include<string.h>  typedef struct  {     char ** s; }me;  me miku[1];  void init() {     char *p="123";     miku[0].s=p; }  int main() {     init();     printf("%s",miku[0].s);     system("pause"); } 这样不要for，好像也可以吧。萌新一枚\(//∇//)\我这里123是随便写的，其实应该是几十个长度不一的字符串，功能是希望根据s[i]输出不同位置的字符串。不过还是谢谢你提供了一种新的思路[/quote]

user: user-0
content: 引用 3 楼 雾夕miku 的回复：#include<stdio.h> #include<stdlib.h> #include<string.h>  typedef struct  {     char ** s; }me;  me miku[1];  void init() {     char *p="123";     miku[0].s=p; }  int main() {     init();     printf("%s",miku[0].s);     system("pause"); } 这样不要for，好像也可以吧。萌新一枚\(//∇//)\我这里123是随便写的，其实应该是几十个长度不一的字符串，功能是希望根据s[i]输出不同位置的字符串。不过还是谢谢你🙏🏻提供了一种新的思路

user: user-2
content: #include<stdio.h> #include<stdlib.h> #include<string.h>  typedef struct  {     char ** s; }me;  me miku[1];  void init() {     char *p="123";     miku[0].s=p; }  int main() {     init();     printf("%s",miku[0].s);     system("pause"); } 这样不要for，好像也可以吧。萌新一枚\(//∇//)\

user: user-0
content: 引用 1 楼 六道佩恩 的回复：Line[0].s[0]是一个char型整数我想通过那个for，使用s将三个字符串都输出，有什么高见吗？使用s[i]的话总会报错

user: user-3
content: Line[0].s[0]是一个char型整数