我的程序从命令行参数到名称获取名称和年龄,并将每个名称和年龄存储为结构的元素。当我运行它时,我的问题是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]);
答案 0 :(得分:4)
问题在于此循环:
for (i = 0; i<argc/2; i++)
strcpy(people[i].name, argv[i*2+1]);
您有两个超出范围的数组引用:
您正在从0..argc-1循环,因此您从1..argc引用argv - 即。超出范围。
此外,您正在创建一个长度为argc / 2的数组,但您正在引用元素0 ... argc - 即。另一个阵列溢出。
循环应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/Dark_Grey"
tools:context=".NavigationDrawerFragment">
<ImageView
android:layout_width="fill_parent"
android:layout_height="150dp"
android:id="@+id/imageView"
android:src="@drawable/bitsnbytes_logo_phrase"
android:padding="10dp"/>
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="@color/DARK_GREEN"
/>
</LinearLayout>