Tag: 数组

c数组:动态设置大小?

我是C编程的新手。 我试图使用变量设置数组的大小,但我收到一个错误: ‘数组’的存储大小不是恒定的 ! 01 int bound = bound*4; 02 static GLubyte vertsArray[bound]; 我注意到当我用数字’20’替换边界 (在第02行的括号内)时,程序将运行没有问题。 但我试图动态设置数组的大小… 任何想法为什么我收到此错误? 非常感谢,

C程序打印奇怪的字符

我有一个程序,它读取文件的内容并将其保存到buf 。 在阅读内容后,它应该将两个字符复制到一个数组。 如果我没有尝试从文件中读取,但是如果我尝试从文件中读取它,则缓冲区中的printf打印出我想要的两个字符,但添加了奇怪的字符,这段代码工作正常。 我已经确认并正确保存到buf中,没有奇怪的字符。 我无法弄清楚出了什么问题……这是代码: char *buffer = (char*)malloc(2*sizeof(char)); char *dst = buffer; char *src = buf; char *end = buf + strlen(buf); char *baby = ‘\0’; while (src<= end) { strncpy(dst, src, 2); src+= 2; printf("%s\n", buffer); }

制作一个数组来保存C中的字符数组

我的C现在不仅仅是生锈,所以我没有创造出我认为应该非常基本的东西。 允许我将字符数组称为此post的字符串。 它会让我和你都清楚。 我所拥有的是一个可以容纳1个或更多字符串的数组。 例如{“ab”,“cd”,“ef”}。 我想创建另一个数组来存储字符串数组的多个版本。 所以像{{“ab”,“cd”,“ef”},{“gh”,“ij”},{“kl”}}。 我现在拥有的是: char *arrayOfStrings[50]; // a single array to hold multiple strings char **arrayOfArraysOfStrings[10]; // array to hold multiple snapshots of arrayOfStrings 字符串数组随着时间的推移而变化,我正在使用字符串数组数组来基本保存arrayOfStrings的历史快照。 当我需要访问数据的快照数组时,我的问题出现了。 这是我必须将内容放入快照数组的代码: arrayOfArraysOfStrings[input_index] = arrayOfStrings; // you can assume input_index is updated correctly, I’ve already checked that. 这似乎是不正确的,因为当我尝试访问并打印出快照数组的内容时,它只打印出来自最新的arrayOfStrings的信息。 我想要的想法是将arrayOfChars所指向的地址存储在快照数组的一个条目中,以便我以后可以访问它。 现在,访问快照数组中的条目是这样完成的: arrayOfArraysOfChars[historicalIndex][indexOfTargetChar] 我想回答几个问题: 我概述的方法是否适用于我正在尝试做的事情,或者我的整体逻辑中是否存在缺陷? 我目前的代码出了什么问题?如何解决? 有没有更好的方法来实现这一点,如果是这样,数组的初始化,数组的添加和数组的读取如何工作? –edit […]

在C中比较两个数组,逐个元素

为了使我的计算物理项目中的一个程序(不是由我编写)更加动态,我一直在努力实现C中非常简单的事情:在if条件下逐个元素地比较两个不同的数组。 #include #include #include “header.h” const int nParam = 10; double a[nParam], a_tmp[nParam]; double values[10000]; double FitParam(double x){ int xindex; double value; xindex=(int) x; if (a_tmp[1]==a[1] && a_tmp[2]==a[2] && a_tmp[3]==a[3] && a_tmp[4]==a[4]){ value=values[xindex]; return(value); } // code continues… (very long subroutine and there is recursion for // the subroutine so this if statement above is […]

当p指向数组时,为什么p和* p给出相同的地址?

我在写这个节目 – #include void main() { int arr[20]; arr[0]=22; arr[1]=23; int (*p)[20]=&arr; printf(“address in p :%u:\n”,p); printf(“address in *p:%u:\n”,*p); } 对于p和* p,此代码的输出相同! 据我所知* p持有arr的基地址,这只不过是arr [0]! 所以* p应该给出输出22! 但是它显示了与p一样的内存地址。 请告诉我为什么会这样? 它背后的原因是什么? 键盘站点链接: http : //codepad.org/LK7qXaqt

使用C编程语言在声明时初始化2D数组

当我声明它时,如何用0s初始化2D数组? double myArray[3][12] = ?

将文本文件读入数组

我对编程很陌生,在为一个夏季项目做了一周的努力之后,我真的很感激一些帮助! 我正在尝试读取一个长文本文件,它只是一个长字符串(NB:不是一个实际的编程字符串)的字母,然后将每个字母放入网格中的位置(该程序的目标最终是解决一个wordsearch)到目前为止,我已经提出了下面的程序,它似乎没有生成一个网格,而只是重新打印文本文件,前面有以下内容: {\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf510 {\fonttbl\f0\fmodern\fcharset0 Courier;} {\colortbl;\red255\green255\blue255;} \paperw11905\paperh16837\margl1440\margr1440\vieww10800\viewh8400\viewkind0 \deftab720 \pard\pardeftab720 \f0\fs24 \cf0 我写的程序是这样的: #include #include #include #include #include int main() { int i,j; char myarray[26][26],x; FILE *myfile; for (j=0; j<26; j++) //initialise array elements all to zero { for (i=0; i<26; i++) { myarray[i][j]=0; } } myfile=fopen("*redacted*","r"); if (myfile!=NULL) //check file actually opened { for (i=0; […]

C错误:表达式必须具有常量值

我正在编写一些嵌入式代码,通过SPI与外部设备连接。 该设备有几个不同长度的寄存器,为了保持正确,我已经定义了以下结构 typedef struct { uint16_t Signed :1; // Register is signed or unsigned uint16_t CommLengthBytes :3; // The width of the register in bytes uint16_t Address :12; // Register address }ts_register; 然后,我在源代码中定义了每个寄存器,如下所示 static const ts_register SAGCYC = {0, 1, 0x000}; static const ts_register DISNOLOAD = {0, 1, 0x001}; static const ts_register LCYCMODE = {0, […]

返回错误的数组长度

可能重复: C编程语言中数组的大小? 我一直在摆弄C以便更好地熟悉它,并认为我可能偶然发现了一个我不确定如何解决的初始化/指针问题。 下面的程序是ROT13的一个实现,所以它需要一个输入字符串,并将每个字母移动13,从而得到密文。 我程序的输出显示正确的移位,但它不会超过4个字符,让我想知道sizeof是否被错误地使用。 任何其他建议都表示赞赏,我确信此时我已经搞砸了一些事情。 #include #include void encrypt(char *); int main(void){ char input[] = “fascs”; encrypt(input); return 0; } void encrypt(char *input){ char alphabet[] = “abcdefghijklmnopqrstuvwxyz”; printf(“Input: %s \n”, input); int inputCount = sizeof(input); printf(“Characters in Input: %i \n\n”, inputCount); //holds encrypted text char encryptedOutput[inputCount]; //Initialize counters int i, j = 0; // […]

将文本文件中的输入读入c中的结构数组

我的结构定义是, typedef struct { int taxid; int geneid; char goid[20]; char evidence[4]; char qualifier[20]; char goterm[50]; char pubmed; char category[20]; } gene2go; 我有一个名为“gene2go.txt”的标签分隔文本文件。 该文件的每一行都包含taxID , geneID , goID , evidence , qualifier , goterm , pubmed和category信息。 文件的每一行都将保存在一个结构中。 当程序运行时,它会首先将输入文件的内容读入gen2go类型的数组中,我使用了一个名为readInfo的函数。 该程序还将从命令行获取以下输入参数, 输入类型(1表示taxid ,2表示geneid ,3表示goid )和搜索词 有一个名为listData的函数将文件“gene2go.txt”中与输入类型和搜索项匹配的行列表写入文件“output.txt”。 这是我的文本文件”gene2go.txt” , 3702 814629 GO:0003676 IEA – nucleic acid binding – […]