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
。我得到output
为Segmenation fault (core dumped)
,因为警告而猜测。substr
是我自己的函数。
示例input
和output
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;
提前致谢。
【问题讨论】:
好吧,你应该分配str
和word
。
能否请您进行更改并清楚显示。当我学习 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' 的赋值使指针从没有强制转换的整数