【问题标题】:strcopy crashing c programstrcpy 崩溃 c 程序
【发布时间】:2015-06-24 00:34:08
【问题描述】:

我的程序通过 name 从命令行参数中获取姓名和年龄,并将每个姓名和年龄存储为结构的元素。我的问题是当我运行它时 strcpy 使我的程序崩溃。这是我的代码,如果能得到任何帮助,我将不胜感激。

 #include<stdio.h>
 #include<stdlib.h>
 #include<string.h>

 typedef struct {
     char name[80];
     int age;
 } person;

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

if (argc == 1 || argc % 2 == 0) {
    printf("Invalid arguments.\n Usage: %s name1 age1 name2 age2 ...", argv[0]);
    return 0;
}

person people[argc/2];
int i;

for (i = 0; i < argc; i++)
    strcpy(people[i].name, argv[i+1]);

【问题讨论】:

  • i&lt;argc 应该是 argc/2 对于 people[i],也应该是 argv[i+1] --> argv[i*2+1]
  • @BLUEPIXY 请发布答案。

标签: c string crash strcpy


【解决方案1】:

问题在于这个循环:

for (i = 0; i<argc; i++)
strcpy(people[i].name, argv[i+1]);

您有两个超出范围的数组引用:

  1. 您从 0..argc-1 循环,因此您从 1..argc 引用 argv - 即。超出范围。

  2. 另外,您正在创建一个长度为 argc/2 的数组,但您正在引用元素 0...argc - 即。另一个数组溢出。

循环应该是这样的:

for (i = 0; i<argc/2; i++)
  strcpy(people[i].name, argv[i*2+1]);

【讨论】:

  • 我明白你的意思,我解决了这个问题。非常感谢,出于某种原因,我认为这是一个不兼容的类型问题。
猜你喜欢
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多