警告:赋值从指针生成整数而没有强制转换,分段错误

时间:2012-03-12 11:40:37

标签: c multidimensional-array char printf

我从C开始,来自meta c语言,PHP和HTML的基本,短时间

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

compare(const void * a, const void * b){
    return ( *(int*)a - *(int*)b );
} 

int main(){

    int arr_size = 10;

    int j;

    char array[arr_size][2];
    char str[50];
    char output[50];

    // fill the array with string and random integers
    for (j=0; j<arr_size; j++) {
         strcpy(str, "array");
         array[j][0] = str;       //i've should put *str
         array[j][1] = rand() % arr_size+1;
    }

    // print the array
    for (j=0; j<arr_size; j++) {
        strcpy(str, "");
        strcpy(output, "");
        sprintf(str, "%u", array[j][0]); // %u should be %s but return me segmentation fault
        strcat(output, str);
        strcat(output, " ");
        sprintf(str, "%i", array[j][1]);

        strcat(output, str);
        printf(output); printf("\n");
    }

    printf("\n");

}

这是完整的代码,请看

array[j][0] = str;

sprintf(str, "%u", array[j][0]);

我需要在*之前放置str (*str)来传递警告消息,但我没有声明任何指针。为什么这个解决方案?

如果我使用%u更改%s,则会返回分段错误,问题是什么?

1 个答案:

答案 0 :(得分:0)

array[j][0]char。你不能分配它的字符数组。 *str只是str中的第一个字符,因此此分配有效。

出于同样的原因,你不能用%s打印它 - 这个说明符用于打印以空字符结尾的字符串,而不是单个字符。

你也不能sprintf(str, "%s", array[j]);,因为它不是nul-terminated /