未知长度的 C 字符串定义

标签 c string casting

我需要将数据(以前未知的格式/大小)存储在一个字符串中以便稍后处理(存储在 XML 文件中)

我该怎么做?

如您所见,下面的代码会产生段错误。

char * type;
char * output;

for (i=0; i< 10; i++){ 

if(strcmp(GTK_OBJECT_TYPE_NAME(g_hash_table_lookup(widgetbuffer,allocate[i])), "GtkAdjustment") == 0){
    type = "spin";
    sprintf(output, "%f", gtk_adjustment_get_value(GTK_ADJUSTMENT(g_hash_table_lookup(widgetbuffer,allocate[i]))));

}else if(strcmp(GTK_OBJECT_TYPE_NAME(g_hash_table_lookup(widgetbuffer,allocate[i])), "GtkCheckButton") == 0){
    type = "check";
    sprintf(output, "%d", gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(g_hash_table_lookup(widgetbuffer,allocate[i]))));

}else if(strcmp(GTK_OBJECT_TYPE_NAME(g_hash_table_lookup(widgetbuffer,allocate[i])), "GSList") == 0){
    type = "radio"; // Loop through grouped buttons and find active one
    sprintf(output, "%d", g_slist_position(g_hash_table_lookup(widgetbuffer,allocate[i]),
                g_slist_find_custom(g_hash_table_lookup(widgetbuffer,allocate[i]),
                    NULL, (GCompareFunc) searchRadio)));

}else if(strcmp(GTK_OBJECT_TYPE_NAME(g_hash_table_lookup(widgetbuffer,allocate[i])), "GtkComboBox") == 0){
    type = "combo";
    sprintf(output, "%d", gtk_combo_box_get_active(GTK_COMBO_BOX(g_hash_table_lookup(widgetbuffer,allocate[i]))));

}else if(strcmp(GTK_OBJECT_TYPE_NAME(g_hash_table_lookup(widgetbuffer,allocate[i])), "GtkEntry") == 0){
    type = "entry";
    output = (char *) gtk_entry_get_text(GTK_ENTRY(g_hash_table_lookup(widgetbuffer,allocate[i])));

}
[...]

最佳答案

通常,要在 C 字符串中“存储未知大小的数据”,您有两种选择:

  1. 分配一个足够大的缓冲区来容纳任何预期的大小(这意味着如果数据超过该大小,您将截断数据),或者

  2. 动态分配一个足以容纳数据的缓冲区(使用 malloc())。也不要忘记 free() 它。

您的代码正在使用未初始化的指针output,这就是它出现段错误的原因。您将需要执行上述操作之一。

关于未知长度的 C 字符串定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850932/

相关文章:

c - 阿姆斯壮数字缓冲区溢出

c - 为什么我在第二次搜索文件时收到段错误错误?

c - strtod 在 Qt 项目中使用时截断小数

haskell - Haskell 中的隐式静态类型转换(强制)

c - strtok函数和多线程

string - UIWebView 崩溃从 HTML 加载链接

c - 在c中解析字符串

java - 如何使用parseInt将字符串转换为整数?

sql - 为什么此查询针对不同的日期格式返回不同的结果?

c++ - 在 C++ 中正确转换 float