c - 如何编写用指针扫描字符串的程序
问题描述
我正在尝试编写一个程序,要求用户输入几个名称(在本例中为 3,请查看我的定义),该程序带有函数scan_names
,并且print_names
无论我做什么都会扫描名称并打印它们不要成功:(
这是我得到的异常:“在 Magshimim_EX175.exe 中的 0x0FD6FB7C (ucrtbased.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x00616161。”
#include <stdio.h>
#define LINE 3
#define LENGH 10
void print_names(char* names[LENGH], int line)
{
printf("\nYour names are:\n");
for (size_t i = 0; i < line; i++) {
puts(names[i]);
}
}
void scan_names(char* names[LENGH], int line)
{
for (int i = 0; i < line; i++) {
printf("\nEnter name %d: ", i + 1);
fgets(names[i],LENGH,stdin);
}
}
int main(void)
{
char names[LINE][LENGH] = { NULL };
scan_names(names, LINE);
print_names(names, LINE);
}
解决方案
char names[LINE][LENGH]
是一个二维字符数组。char* names[LENGH]
是字符指针的一维数组。就像您的编译器告诉您是否打扰阅读警告/错误一样:类型不兼容。
将函数更改为void print_names(char names[LINE][LENGH], int line)
。
推荐阅读
- java - 改进计算器循环的建议?
- oracle - ORA-12170: TNS: 发生连接超时 12170. 00000 - “TNS: 发生连接超时”
- reactjs - React Hook 在带有钩子的 react.js 中使用上下文错误
- perl - 不能使用数组作为参考 SnortSnarf HTMLMemStorage
- android - 如何返回上一个活动
- pyspark - 删除 spark 中 90% 列匹配的重复项
- wcf - TCP 错误代码 10048:每个套接字地址(协议/网络地址/端口)通常只允许使用一次
- router - Zabbix- 来自 SNMP 监控主机的 Ping 检查
- node.js - 返回前节点postgres查询更新结果
- vba - 为计算字段构建条件语句