c语言从文件中读取坐标到数组,从文件中读取行并将每个单词存储到一个数组中(C语言)(read line from file and store each word into an array (C l..._weixin_39569389的博客-程序员资料

技术标签: c语言从文件中读取坐标到数组  

从文件中读取行并将每个单词存储到一个数组中(C语言)(read line from file and store each word into an array (C language))

我正在尝试在C中创建一个函数来读取第一行表单文件并将每个单词存储到一个字符串数组中,而不是返回数组或打印它(我使用了strtok())。 我已经编写了我的代码,但是当我测试它时,我得到一个错误:“分段错误”,我不知道这意味着什么。 任何帮助??? 我看到这个问题Segmentation fault与字符串数组C我认为它类似但我仍然不明白。 这是我的代码:

从文件读取数据并将其存储到数组函数中的函数位于文件:methodes.c上

void lireFichier (char *file)

{

int i = 0;

int nbElement = 4;

char ** tab;

char line [1000];

char *str[1000];

const char s[2] = " ";

char *token;

FILE *myFile;

myFile = fopen(file, "r");

if(!myFile)

{

printf("could not open file");

} else

{

printf("file opened\n");

//while(fgets(line,sizeof line,myFile)!= NULL)

//get the fisrt line

fgets(line,sizeof line,myFile);

//fprintf(stdout,"%s",line);

//get the fisrt word

token = strtok(line, s);

for(i =0; (i< nbElement) && (token != NULL); i++)

{

int len = strlen(token);

tab[i] = malloc(len);

strncpy(tab[i], token, len-1);

token = strtok(NULL, s);

//printf( "%s\n", tab[i]);

}

}

fclose(myFile);

}

这是main.c //我将文件作为参数传递(在argv中)

#include

#include

#include "methodes.h"

int main(int argc, char *argv[])

{

int result = 1;

if(argc < 2)

{

printf("Erreur dans les arguments\n");

} else

{

int idx;

for (idx = 0; idx < argc; idx++)

{

printf("parameter %d value is %s\n", idx, argv[idx]);

}

lireFichier(argv[1]);

}

return 0;

}

这是文件的一个例子:methodes.txt

afficher tableau

partager elements roles

nommer type profession

fin

这是我的输出:

file opened

Erreur de segmentation

注意:输出是法语,所以消息意味着分段错误,谢谢你,对不起所有的细节,我只是想确保人们理解我的意思。

I'm trying to make a function in C that reads a first line form file and store each word into an array of strings, than return the array or print it (I used strtok()). I've written my code but when I test it I get an error: "segmentation error" which I don't know what it means. any help??? I saw this question Segmentation fault with array of strings C i think it's similar but I still don't understand. Here's my code :

the function that reads data from file and store it into an array function is on the file: methodes.c

void lireFichier (char *file)

{

int i = 0;

int nbElement = 4;

char ** tab;

char line [1000];

char *str[1000];

const char s[2] = " ";

char *token;

FILE *myFile;

myFile = fopen(file, "r");

if(!myFile)

{

printf("could not open file");

} else

{

printf("file opened\n");

//while(fgets(line,sizeof line,myFile)!= NULL)

//get the fisrt line

fgets(line,sizeof line,myFile);

//fprintf(stdout,"%s",line);

//get the fisrt word

token = strtok(line, s);

for(i =0; (i< nbElement) && (token != NULL); i++)

{

int len = strlen(token);

tab[i] = malloc(len);

strncpy(tab[i], token, len-1);

token = strtok(NULL, s);

//printf( "%s\n", tab[i]);

}

}

fclose(myFile);

}

and here's the main.c // I pass the file as argument (in argv)

#include

#include

#include "methodes.h"

int main(int argc, char *argv[])

{

int result = 1;

if(argc < 2)

{

printf("Erreur dans les arguments\n");

} else

{

int idx;

for (idx = 0; idx < argc; idx++)

{

printf("parameter %d value is %s\n", idx, argv[idx]);

}

lireFichier(argv[1]);

}

return 0;

}

and here's an example of the file : methodes.txt

afficher tableau

partager elements roles

nommer type profession

fin

and this is my output:

file opened

Erreur de segmentation

note: the output is in french, so the message means segmentation error thank you and sorry for all the details, i just wanted to make sure that people understand what i mean.

原文:https://stackoverflow.com/questions/33324115

更新时间:2020-02-08 14:24

最满意答案

char ** tab;

是指向指针的未初始化指针。 你需要的是一系列指针。

char *tab[10];

而不是10,使用您认为合适的大小并调整代码以包括边界检查。

char ** tab;

Is a uninitialised pointer to a pointer. What you need is a array of pointers.

char *tab[10];

Instead of 10, use the size you see fit and adjust your code to include bounds checking.

2015-10-24

相关问答

给它一个。 如果您阅读每个函数(fopen(),scanf(),fclose())的手册页以及如何分配C语言中的数组,您会更好。您还应该为此添加错误检查。 例如,如果Integers.txt不存在或您没有从中读取的权限会发生什么? 如果文本文件包含超过100个数字,怎么办? FILE *file = fopen("Integers.txt", "r");

int integers[100];

int i=0;

int num;

while(fscanf(f

...

如果我猜你正在寻找像这样的代码。 try {

ArrayList list = new ArrayList();

File dir = new File("path of folder that contains my files")

for (File f : dir.listFiles()) {

BufferedReader br = new BufferedReader(new InputStreamReader(ne

...

你有两个错误。 一个是for循环。 for (int i = 0; i <= listOfFiles.length; i++)

^

在迭代数组时,通常会从0到length - 1迭代length - 1而不是0到length 。 然后第二个是你没有考虑路径,只有文件名。 Path pathToFile = Paths.get(listOfFiles[i].getName());

...

您可以使用File.ReadAllLines方法将文件加载到数组中。 然后,您可以使用for循环遍历这些行,并使用字符串类型的Split方法将每行分隔到另一个数组中,并将这些值存储在格式化数组中。 就像是: static void Main(string[] args)

{

var lines = File.ReadAllLines("filename.txt");

for (int i = 0; i < lines.Length; i++)

...

大约有两种方法可以在数据序列中放置分隔符。 不要将分隔符输出到第一个元素。 以下元素在输出元素之前输出分隔符。 //Pseudocode

for(int rows_index = 0; rows_index < rows_size; ++rows_index){

for(int columns_index = 0; columns_index < columns_size; ++columns_index){

if(columns_index != 0)//not firs

...

你没有用fgetc检索一行。 您正在从文件中一次检索一个字符。 该示例保持检索字符,直到EOF字符被加密(文件结束)。 看看fgetc的这个描述。 http://www.cplusplus.com/reference/clibrary/cstdio/fgetc/ 在while循环的每次迭代中,fgetc将检索单个字符并将其放入变量“n”。 可以帮助你在C中使用“字符”的东西就是把它想象成一个字节,而不是实际的字符。 你在这里不理解的是int是4个字节,字符是1个字节,但两个都可以为相同的ASCII

...

首先,使用ifstream代替fstream和ios_base::in 。 接下来,使用std::getline()将一行作为字符串,为它创建一个向量(可能在vector> ),然后解析它(可能使用std::istringstream )。 First, use ifstream instead of fstream with ios_base::in. Next, use std::getline() to get one line as a string, cre

...

char ** tab;

是指向指针的未初始化指针。 你需要的是一系列指针。 char *tab[10];

而不是10,使用您认为合适的大小并调整代码以包括边界检查。 char ** tab;

Is a uninitialised pointer to a pointer. What you need is a array of pointers. char *tab[10];

Instead of 10, use the size you see fit and adjust

...

我认为您的list已包含一些数据,您应该在向其添加新文件数据之前将其清除。 OpenFileDialog txtopen = new OpenFileDialog();

if (txtopen.ShowDialog() == DialogResult.OK)

{

list.Clear(); //

string FileName = txtopen.FileName;

string line;

System.IO.StreamRea

...

您将变量声明两次,一次在参数列表中,一次在“本地声明”中。 功能支架未关闭。 一个fscanf只能读取由其格式字符串指定的多个项目,在本例中为3( "%d%d%d" )。 它读取数字,而不是数组。 要填充数组,您需要一个循环( while或for )。 编辑 好的,这是一种方法: #define MAX 50

#include

int readresults(FILE *results, int *studID, int *score1, int *score2) {

i

...

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39569389/article/details/117010684

智能推荐

SpringBoot启动自动执行sql脚本_itCatface的博客-程序员资料

navicat导出sql脚本包含建表语句和数据插入等语句右键数据库&gt;转储SQL文件&gt;结构和数据...SpringBoot启动自动执行sql脚本逻辑编写结构总览编写sql脚本,置于resources/sql目录下schema.sqlDROP TABLE IF EXISTS people;CREATE TABLE IF NOT EXISTS people( persion_id INT NOT NULL, first_name VARCHAR(

(一)Spring源码分析IOC流程图上_star++的博客-程序员资料_spring ioc 流程图

概述这是spring源码中IOC启动的前几个步骤:1.使用applicationContext创建容器实例DefaultListableBeanFactory2.将我们通过注解或者xml配置的bean转换为BeanDefinition存储到容器中3.创建BeanFactoryPostProcessor对象,注册到容器中,执行容器后置处理回调4.创建BeanPostProcessor对象...

File "/usr/bin/yum-config-manager", line 133 except yum.Errors.RepoError, e:_shunzi2016的博客-程序员资料

遇到这个错误是因为我升级了Python到3.6.2,但是yum-config-manager这个文件头的Python没有改成Python2,如下图看哦,我升级了python,说明以后遇见的类似错误都这样改就搞定了...

合成大西瓜开发源码,手把手教你运行和部署大西瓜游戏项目_爱笑的架构师的博客-程序员资料_合成大西瓜游戏开发

最近合成大西瓜非常火,很多编程爱好者将大西瓜改成了各种版本,非常魔性,哈哈。如果你也想魔改大西瓜,或者想研究一下大西瓜源码怎么玩的,下面的教程手把手教你从合成大西瓜源码运行到部署。

dgraph部署和使用_一闪一闪满天星的博客-程序员资料_dgraph ratel

dgraph安装和启动下载安装包解压,会有三个文件 badger 、dgraph、dgraph-ratel启动zero ./dgraph zero启动alpha./dgraph alpha --lru_mb 2048 --zero localhost:5080启动ratel./dgraph-ratel访问可视化页面 localhost:8000提示 您需要设置Dgraph服务器可以通过 lru_mb 标志的估计内存。这只是Dgraph服务器的一个提示,实际使用率会高于此值。建议将lru_m

HTML5之title属性解决长文本显示不完全问题_夜空下的微笑的博客-程序员资料

&lt;div class="ellipsis" title="${item.comment}"&gt;${item.comment}&lt;/div&gt; 鼠标移上去全部显示&lt;div class="ellipsis" title=${item.comment}&gt;${item.comment}&lt;/div&gt; 鼠标移上去部分显示..._1671465600

随便推点

11个值得收藏的零知识证明开发工具_新缸中之脑的博客-程序员资料

零知识证明是区块链开发者值得关注的密码学技术,本文整理了11个主流的零知识证明开发库,希望有助于你在自己的项目中学习并利用零知识证明技术。用自己熟悉的语言学习以太坊DApp开发:Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart1、libsnarklibsnark是SCIPR Lab开发的zkSNARK方案实现,开发语言为C++,应用于zcash等多个项目。libsnark主要包括三部分:通用证据系统、基础电路库

UNIMO:通过跨模态对比学习实现统一模态的理解和生成_Civisky的博客-程序员资料

现有的预训练方法或侧重于单模态任务,或侧重于多模态任务,不能有效地相互适应,只能利用单模态数据或有限的多模态数据。作者提出了统一模态预训练体系架构UNIMO,可以有效地适应单模态和多模态的理解生成任务。UNIMO利用大规模自由文本语料库和图像集来提高视觉文本理解能力,利用跨模态对比学习(CMCL)将文本和视觉信息整合到统一语义空间中,形成一个由图像和文本组成的“图像-文本对”语料库。UNIMO借助丰富的非配对单模态数据,通过允许文本视觉知识在统一语义空间中相互增强,从而学习到更泛化的表示。实验结果表明,UN

运筹优化(十九)--决策论基础及其最优化求解_Eason.wxd的博客-程序员资料_maxmax对应的风险态度

研究决策的问题包括:决策的基本原理、决策的程序、决策的信息、决策的方法(定量与定性的方法)、决策的风险、决策中的人因素、决策的思维方式、决策的组织、决策的实施 等。决策科学包括的内容十分广泛:涉及社会学、决策心理学、决策行为学、决策的量化方 法和评价、决策支持系统和决策自动化等多学科和多领域的综合应用。单目标决策决策的分类从不同的角度出发可得不同的决策分类。1. 按性质的重要性...

murmur:更快更好的哈希函数(字符串转64位hash值)_wisage的博客-程序员资料_murmur3 64bit 负数

unsigned long long MurmurHash64B ( const void * key, int len, unsigned int seed ){ const unsigned int m = 0x5bd1e995; const int r = 24; unsigned int h1 = seed ^ len; unsigned int h2 = 0; con

U-Boot的配置、编译、连接过程_BoArmy的博客-程序员资料

原文来自zhiy66's的博客,原文地址:http://blog.cechina.cn/zhiy66/Bootloader的概念1. Bootloader的引入从前面的硬件实验可以知道,系统上电之后,需要一段程序来进行初始化:关闭WATCHDOG、改变系统时钟、初始化存储控制器、将更多的代码复制到内存中等等。如果它能将操作系统内核 (无论从本地,比如Flash;还是从远端,比如通过

推荐文章

热门文章

相关标签