当我遇到以下问题时,我正在尝试测试一种进行置换的替代方法。
当变量大小等于26(字母的大小)时,代码运行良好,但是如果变量足够大,则代码失败,但是如果我按代码中的定义进行操作并删除两个 for 跟随的循环没有问题。所以分配不是问题,循环似乎是问题,但是只有当 size 足够大时,这没关系,因为现在的代码是正确的,我只处理第一个26个元素,怎么回事?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static const char alphabet[] = "abcdefghijklmnopqrstuvwxyz";
static const int alphabetSize = sizeof(alphabet) - 1;
int main(void)
{
long size = 8353082582; // 26^6 + 25^5 + 26^4 ...
char* words[size];
for (int i=0; i < strlen(alphabet); ++i)
{
words[i] = malloc(sizeof(char));
if (words[i] == NULL) {
printf("Memory allocation failed\n");
}
strncpy(words[i], &alphabet[i], sizeof(char));
}
for (int i=0; i < strlen(alphabet); ++i)
printf("%s\n",words[i]);
return 0;
}
返回
Segmentation fault: 11