在C ++ 4.8.1中使用strlen的打印输出时出现分段错误

时间:2014-06-21 16:42:35

标签: c++ segmentation-fault strlen

#include<cstdio>
#include<cstring>
#include<cstdlib>

int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        char *str;
        scanf("%s",str);
        int l,n,nop=1;
        l=strlen(str);
        printf("Length %d",l); //causing segmentation fault
        if(l%2==0)n=l/2;
        else n=(l-1)/2;
        for(int i=0;i<n;i++)nop=nop+abs(str[i]-str[l-1-i]);
        printf("%d\n",nop);
    }
    return 0;
}

打印字符串长度时出错。如果我删除该行代码工作但输出不正确。 该代码适用于DevC ++

1 个答案:

答案 0 :(得分:1)

您需要通过为其分配空间来初始化str

char *str = (char *)malloc(SIZE);  

否则它将调用未定义的行为。另外,声明l类型的size_t,因为strlen返回的类型为size_t,并在%d中将%zu更改为printf