c - 将字符串数组作为参数传递给函数
问题描述
我试图将一个字符串数组传递给一个函数,然后在那里打印它。但它给出了分段错误。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *str[2];
for(int i=0;i<2;i++) {
scanf("%s",(str+i));
}
display(str);
}
void display(char **p)
{
for(int i=0;i<2;i++) {
printf("%s \n",p[i]);
}
}
解决方案
我认为问题在于您没有为列表分配内存。这是我制作的示例代码。
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
#define LIST_SIZE 2
#define MAX_WORD 100
void display(char**);
int main() {
char buffer[100];
char** list;
int i;
int n;
// allocate
list = (char**)malloc(sizeof(char*) * LIST_SIZE);
for(i = 0; i < LIST_SIZE; i++) {
scanf("%99s",buffer);
n = strlen(buffer);
list[i] = (char*)malloc(sizeof(char) * n);
strcpy(list[i], buffer);
}
display(list);
return 0;
}
void display(char** str) {
int i;
printf("-- output ---\n");
for(i = 0; i < LIST_SIZE; i++) {
printf("%s\n", str[i]);
}
}
我使列表仅分配单词所需的空间。如果要修复,则不需要缓冲区和 strcpy。
推荐阅读
- python - TF 版本:2.4.1,TypeError:“ReadFile”Op 的输入“文件名”的类型为 float32,与预期的字符串类型不匹配
- gremlin - 将(500 万)批量加载到 Janusgraph 的最佳方法
- python - 为类属性分配方法
- python - Psychopy如何解决TypeError:*:'NoneType'和'int'不支持的操作数类型
- flutter - 在颤动中向http响应添加多个标头
- javascript - 有没有办法为 div 创建波浪形边框半径,以及使用图像背景的最佳方法是什么
- java - 如何使用 com.google.android.material 对象和更改按钮背景
- c# - 如何在 C# 中关闭这个循环二维数组?
- bash - 使用读取的输出作为变量时的语法错误
- python - 使用 Python 绘制 3D 图