这是一个由在线评委评估的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#define true 1
#define false 0
#define DICT_LENGTH 10
int dictionary_contains(char *s, char dict[][10]){
int i;
for(i=0;i<DICT_LENGTH;i++){
if(!strcmp(dict[i], s))
return true;
}
return false;
}
bool break_word(char *s, char dict[][10])
{
int j;
int len = strlen(s);
if(len==0)
{
//printf("1YES");
return true;
}
bool wb[len+1];
int k;
for(k=0;k<len+1;k++)
{
wb[k]=false;
}
int i;
for(i=1; i<=len; i++)
{
char *prefix = (char *)malloc(i+2);
strncpy(prefix,s, i);
prefix[i] = '\0';
if(wb[i]==false && dictionary_contains(prefix,dict))
{
wb[i]=true;
//printf("%s",prefix);
//printf("%d",i);
}
if(wb[i]==true)
{
//printf("%d",i);
if(i==len)
{
//printf("%d",i);
//printf("3YES");
return true;
}
for(j=i+1;j<=len;j++)
{
char *suffix = (char *)malloc(len - i);
strncpy(suffix,s+i, j - i);
suffix[j -i ] = '\0';
//printf("\n%s",suffix);
//printf("%d\n",j);
if(wb[j]==false && dictionary_contains(suffix,dict)==true)
{ wb[j]=true;
// printf("%d",j);
}
if(j==len && wb[j]==true)
{
// printf("%s",suffix);
return true;
}
free(suffix);
}
}
free(prefix);
}
return false;
}
int main(){
int t,M,L,i;
scanf("%d %d",&M,&L);
char dict[1003][10];
for (i = 0; i < M ;i++)
scanf("%s", dict[i]);
char string[100004];
scanf("%d",&t);
while(t--)
{
scanf("%s",string);
if( break_word(string, dict)==false)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
不幸的是,它显示以下错误
Forbidden syscall rt_sigprocmask
即使它在我的本地编译器中工作正常。它是什么原因以及如何纠正它?