gcc警告分配使指针从整数而不进行强制转换[重复]

Posted

技术标签:

【中文标题】gcc警告分配使指针从整数而不进行强制转换[重复]【英文标题】:gcc warning assignment makes pointer from integer without a cast [duplicate] 【发布时间】:2020-05-30 03:24:37 【问题描述】:

我正在尝试使用数字进行所有可能的字母组合。 Input NUM 由用户提供。 通过将输入数字分成两位数来创建组合。 Input 获取为char* 我正在使用C。我得到outputSegmenation fault (core dumped),因为警告而猜测。substr 是我自己的函数。 示例inputoutput

input: 11112
output: 
AAAAB
AAAL
AAKB
AKAB
AKL
KAAB
KAL
KKB

我的CODE

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

char* substr(char* str,int l,int n)

    char* c;
    int len = n-l;
    while(l<n)
    
        *c = *(str+l);
        l++;
        c++;
    
    *c='\0';
    return c-len;



int printAlpha(char* str, char* word)

    char *sub;
    char* ch;
    int n = strlen(str);
    if(n == 0)
    
        printf("%s",word);
    
    else
    

     sub = substr(str,0,1);
     int num = atoi(sub);
     str = substr(str,1,n);
     ch = 'A'+(num-1); 
     printAlpha(str, strcat(word, ch));
     sub = substr(str,0,2);
     num = atoi(sub);
     if(strlen(str)>=2 && num <= 26)
     
         str = substr(str,2,n);
         ch = 'A'+(num-1);
         printAlpha( str, strcat(word, ch) );
     
    
    return 0;



int main()

    char* str;
    char* word = '\0';
    scanf("%s",str);
    printAlpha(str,word);

    return 0;

提前致谢。

【问题讨论】:

好吧,你应该分配strword 能否请您进行更改并清楚显示。当我学习 C 时,C 中的字符串概念总是令人困惑。并给我一个简单的解释,以便将来避免这种情况,比 另外在这里将char* word = '\0'; 分配给'\0'word 是错误的,因为word 是字符指针而不仅仅是一个字符。应该是char* word = NULL; @Maddy 阅读this 了解如何动态分配内存并将其分配给word 基本上在 C 中尝试字符串之前,您必须已经对数组和指针有扎实的了解。从高级编程语言到 C 的人总是会犯这个错误。 【参考方案1】:

正如评论者所说,您需要在 c 中动态分配内存。

在 c 中,如果您需要存储诸如字符数组之类的内容,您有 2 个基本场景:

    在编译之前你知道你的数组将包含多少个元素然后你可以使用

    char word[numberOfLetters]

只要您不需要存储更多字母,这将起作用,在其他情况下会出现问题

    在编译之前你不知道你的数组有多大

    例如,当您在做长度可变的事情时。想象一下将用户输入存储到 char 数组中。你应该如何制作阵列?如果您将其设置为 100 个字符大并且用户键入 101,那么您将得到一个段错误或丢失他在第 100 个字符之后键入的所有内容

您也可以通过使数组变大来解决这个问题,但是如果输入很短,您会浪费大量内存,并且您仍然会遇到问题,如果您需要比您选择的大小多 1 个字符,它将无法工作.

在这里,您必须使用诸如element_ptr* =malloc(numOfElements*sizeof(element)); 之类的函数来使用动态内存分配来在运行时请求内存。

malloc 的作用是返回一个指向您请求的内存地址的指针

当您不再需要内存时,您调用free(element_ptr); 这将再次释放内存,否则它将保持阻塞状态。

最好在手册页中阅读 malloc

【讨论】:

以上是关于gcc警告分配使指针从整数而不进行强制转换[重复]的主要内容,如果未能解决你的问题,请参考以下文章

赋值使指针从整数而不进行强制转换

从‘char *’初始化‘char’从指针生成整数而不进行强制转换

从 'void *' 对 'int' 的赋值使指针从没有强制转换的整数

strcpy 从整数生成指针而不进行强制转换

警告:赋值从整数中生成没有强制转换的指针[-Wint-conversion]

警告:从/到不同大小的整数转换为/从指针转换