我声明了一个数组,并填充了3个字符串(数学,物理,英语)。我使用fgets()来获取要添加到数组的新主题,这很正常。但是,每当我复制相同的代码块以从用户那里获得另一个主题时,程序就会崩溃。
为什么会这样?如何从用户获取字符串并将其添加到数组?
@Override
public View getGroupView(final int groupPosition, boolean isExpanded,View convertView, final ViewGroup parent) {
if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater)this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.row_list_header,null);
}
CheckBox chkGroup = (CheckBox) convertView.findViewById(R.id.chkGroup);
chkGroup.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v.findViewById(R.id.chkGroup);
if (cb.isChecked()) {
privateGroupChecked.set(groupPosition, true);
else {
privateGroupChecked.set(groupPosition, false);
}
notifyDataSetChanged();
}
});
return convertView;
}
@Override
public View getChildView(final int groupPosition,final int childPosition, boolean isLastChild, View convertView,ViewGroup parent) {if (convertView == null) {
LayoutInflater infalInflater = (LayoutInflater)this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.row_list_child, null);
}
boolean isGroupChecked = privateGroupChecked.get(groupPosition);
if (isGroupChecked) {
chkDevice.setChecked(isGroupChecked);
}
else
{
chkDevice.setChecked(!isGroupChecked);
}
return convertView;
}
答案 0 :(得分:2)
请注意,subjectName
是char*
类型的数组。
您的前3个字符串是静态定义的。
对于您希望通过fgets()
获取的字符串,您需要先使用mallaoc
分配内存,然后再调用fgets()
。
类似的东西:
subjectName[numOfSubj] = (char *) malloc(50*sizeof(char));
fgets(subjectName[numOfSubj], 50, stdin);
最后不要忘记free
分配的内存。
请注意,您可能需要考虑不同的方法。您可以静态定义数组:char subjectName[1000][50]
并使用strcpy()
用“Math”,“Physics”和“English”填充它。
答案 1 :(得分:2)
你有一个1000个指针的数组,但与这个问题相关的指针并没有指向任何东西。在调用malloc
之前,你需要fgets
一些内存用于指针,例如
printf("Enter new subject name: ");
subjectName[numOfSubj] = malloc( 50 );
fgets(subjectName[numOfSubj], 50, stdin);
答案 2 :(得分:2)
它在第一种情况下正在工作,因为您正在使用主题名称初始化char数组,因此编译器会分配内存。
在USER情况下,您需要在从用户那里获取输入之前分配内存。
fgets(subjectName [numOfSubj],50,stdin); //这里你传递了null char 阵列
所以要避免错误
subjectName[numOfSubj] = malloc( 50 ); //memory allocation
fgets(subjectName[numOfSubj], 50, stdin);
每当你完成它的使用时,和free
内存(由malloc分配)。
free(subjectName[numOfSubj] );