c - 指向整数转换错误的不兼容指针

标签 c arrays malloc return-type

我正在尝试学习 c,其中 main 函数调用一些其他函数返回一个数组(例如字符串类型)。

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

char* array_return(char* name);

int main(){
    char* name="orange";
    char* A;
    A=array_return(name);
    free(A);

    printf("%s\n","Check stored values in A");
    int k,n;
    n=10;
    for (k=0; k < n; k++) {
        printf("%s\n",A[k]);
    }

    return 0;
}


char* array_return(char* name){
    int k,n;
    n=10;
    char* A=malloc(n);
    char string[100];

    printf("%s\n","Store values in A");
    for (k=0; k < n; k++) {
        strcpy(string,"Numer of ");
        strcat(string,name);
        strcat(string," are: ");
        sprintf(string,"%s %i",string,k);
        A[k]=string;
        printf("%s\n",A[k]);
    }
    printf("%s\n","--------------------------");
    return A;
}

我正在尝试将以下值存储在数组“A”中:

Numer of orange are:  0
Numer of orange are:  1
Numer of orange are:  2
Numer of orange are:  3
Numer of orange are:  4
Numer of orange are:  5
Numer of orange are:  6
Numer of orange are:  7
Numer of orange are:  8
Numer of orange are:  9

但是,我收到了一些警告

warning: format specifies type 'char *' but the argument has type 
'char'

incompatible pointer to integer conversion assigning to 'char'
  from 'char [100]' [-Wint-conversion]

而且,当我运行程序时出现以下错误:

Segmentation fault: 11

如果有人能帮我调试这段代码,我将不胜感激。

最佳答案

所以你的代码问题很多。与您的错误消息相关的原因是 A[k] 不是字符串,而您正试图将其作为一个字符串打印出来。

printf("%s\n",A[k]);

A[k]A 指向的内存中的第 k 个元素,因为 A声明为 char *,这意味着 A[k] 的类型为 char。要执行您想要执行的操作,您希望 A 像这样实际声明为 char **

char **A=malloc(sizeof(*A)*n); // We need n lots of what A points to

但您的代码在技术上仍然无法正常工作,因为将 string 分配给 A[k] 只是将 string 指向的内容复制到每个元素中A 所以它们都是一样的。也就是说,直到该函数完成,然后您进入未定义行为的领域,因为 string 使用的内存不再有效。

所以您要做的是将string 中的字符串复制到A[k] 指向的新字符串中。最简单的方法是使用 strdup,因为它会为您的字符串分配空间并在一个函数调用中复制它。

A[k]=strdup(string);

或者,您可以完全放弃 string 并为 A[k] 分配内存,然后直接在其中构建您想要的字符串。

关于c - 指向整数转换错误的不兼容指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44681067/

相关文章:

Javascript onclick 附件索引器问题

javascript - 使用单个数组 Angular c​​omponent.html 显示矩阵

c - 带有永不返回的 C 字符串的函数

ios - Swift:像 Lua 一样快速从数组中删除元素

c - 错误 "malloc: *** error for object 0x7b: pointer being freed was not allocated"可能是什么原因

c - 组装一个 c 字符串并通过引用返回它(使用 malloc 和 string.h 函数)

c - 获取条件表达式的地址

c - 为什么 C 数组初始化语法不允许任意赋值?

c - 是否可以删除/proc/<pid>/fd中的fd链接?

c - 指针算术 :++*ptr or *ptr++?