#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;
}
문자열의 길이를 인쇄 할 때 오류가 발생합니다. 그 행을 지우면 코드가 제대로 작동하지만 잘못된 결과가 나옵니다.C++에서 strlen의 인쇄 출력을 사용하는 동안 세그먼트 오류가 발생했습니다. 4.8.1
char *str = (char *)malloc(SIZE);
그렇지 않으면 정의되지 않은 동작를 호출합니다 : 코드는 당신이 그것을 위해 공간을 할당하여 str
를 초기화해야
'의 char * str을에서
%zu
에%d
을 변경; scanf ("% s", str); 포인터는 자동으로 무기한 크기의 문자열을 저장할 수있는 메모리를 가리 키지 않습니다. – chris'str'은 어디에서 초기화합니까? –
@chris는 당신이 str 앞에 짧다는 것을 말하려는 것이고 이것은 메모리 corruptiom으로 연결됩니다. – bmargulies