struct arr
{char * str;
int ctr;
}m_arr[100];
我面临的问题是每当我在string和int字段中插入一个值并遍历数组进行打印时,int
字段显示正确,但我的字符串字段始终是我更新的最后一个字段。
例如:我传递的值是{'t-1',2} and {'t-2',5}
。
当我使用for循环显示数组元素时,我得到{'t-2',2}
和{'t-2',5}
。
我哪里错了?
我首先尝试使用队列并遇到同样的问题。所以使用数组实现但同样的问题。请帮忙。很紧急。
答案 0 :(得分:1)
你必须在某处为字符串分配空间。在结构中最容易做到这一点:
struct arr
{
char str[32];
int ctr;
} m_arr[100];
但你也可以通过动态内存分配malloc()
等(或使用strdup()
)来实现。
使用显示的结构,您可以使用m_arr[i].str
或等效内容将您阅读的字符串复制到strcpy()
。请记住确保字符串对于数据来说不会太长。 strdup()
的一个优点是动态分配是字符串总是足够大。
答案 1 :(得分:1)
这里的问题是你实际上并没有将字符串存储在那里。你只是保持一个指向它的指针。我假设您实际打印的值是您用来填充它的一些临时字符串。
最简单的修复方法是使用字符串而不是指针:
struct arr
{
char str[10]; // able to hold up to 9 characters + terminating \0
int ctr;
} m_arr[100];
要实际存储您必须复制的字符串,例如使用strcpy()
或sprintf()
。