C语言编程,求助高手

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程,求助高手相关的知识,希望对你有一定的参考价值。

我定义了一个结构体
struct User

char name[10];
int score
;
并创建了一个结构体数组
User*array,里面有n个元素,下标分别为0~n-1;
现在我有两个常量user_name和user_score,想在结构体数组中添加元素array(n)
于是我尝试了各种初始化方法,但都无法解决,求大神帮忙

你的动态数组只有n个元素,已经装满了的话,就需要扩容。

具体看例子。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct User

char name[10];

int score;

;

int main()

const char user_name[]="wonder";

const int user_score=99;

//c表示容量,n表示元素数量,incr表示每次扩容时的增量

int c=1,n=0,incr=10;

int i;

struct User *array=(struct User*)calloc(c,sizeof(struct User));

strcpy(array[0].name,"name1");

array[0].score=1;

n++;

printf("追加用户前:\\n");

for(i=0;i<n;i++)

printf(n-1!=i ? "%s %d," : "%s %d\\n",

array[i].name,array[i].score);

//n>=c说明动态数组array已装满,需扩容

if(n>=c)

printf("对动态数组array进行扩容\\n");

c+=incr;

array=(struct User*)realloc(array,sizeof(struct User)*c);

//追加

strcpy(array[n].name,user_name);

array[n].score=user_score;

n++;

printf("追加用户后:\\n");

for(i=0;i<n;i++)

printf(n-1!=i ? "%s %d," : "%s %d\\n",

array[i].name,array[i].score);

free(array);

return 0;

参考技术A 初始化的类型不能直接用User,必须加上struct。而且数组初始化时元素个数必须是定值,初始化以后元素个数是不可以改变的。
比如初始化数组,元素有10个:
struct User array[10];
如果想增加元素,必须用链表的形式:
struct User *array;
然后用malloc动态分配内存。追问

malloc分配内存的那一步怎么写呀
是array[n]=(User*)malloc(sizeof(User))吗

追答

array=(struct User*)malloc(10*sizeof(struct User));

[求助]有没有C语言高手啊,关于execv的用法

最近刚接触C,需要做一个minishell
类似linux下的bash,不过要简单很多很多
用fork()和execv()实现
怎么用execv()来运行输入的指令呢。。。
比system()要复杂的多啊 @_@

测试不带参数的
execv(str, NULL);
str是输入的路径
貌似没有反应...
man execv看不太懂
带参数的又应该要怎么写?

第一次用百度知道,不知道发的对不对
哪位能指导一下啊。。。大感谢

  execv用法介绍:

  execv会停止执行当前的进程,并且以progname应用进程替换被停止执行的进程,进程ID没有改变。

  如果应用程序正常执行完毕,那么execv是永远不会返回的;当execv在调用进程中返回时,说明这个应用程序应该出错了,此时它的返回值应该是-1,具体的错误代码可以通过全局变量errno查看,还可以通过stderr得到具体的错误描述字符串。

  示例如下:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>


main(void)

  pid_t pid = fork();
   
  if( pid == 0 ) // this is the child process
  
     execv("/bin/ls", NULL);

     // the program should not reach here, or it means error occurs during execute the ls command.
     printf("command ls is not found, error code: %d(%s)", errno, strerror(errno);
  
参考技术A #include<process.h>
int execv (char *path.char *argv[]);
加在exec..函数族名后的后缀p、l、v、e表示指定的函数具有功能;其中v表示参数指针(argv【0】..,argv【n】)按指针数组传送。一般来说,当要传送的参数可变时、用后缀v。本回答被提问者采纳

以上是关于C语言编程,求助高手的主要内容,如果未能解决你的问题,请参考以下文章

怎样用c语言产生0-100随机数?求助高手

求助C语言高手,关于魔方矩阵的问题

C语言 keil中的错误 高手啊

关于C/C++的一些问题,着急找高手求助

求助用C语言程序设计一个计算器

求助高手,我在IDAPRO函数堆栈窗口中删除了r和s,应该怎么恢复