【发布时间】: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 的人总是会犯这个错误。