文字列があります:「これは単純な文字列です」
私の目的は、strstr
「シンプル」を見つけて「サンプル」に置き換えることです。
コード:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char *argv[]){
char *str;
char *pch;
int i=0;
if((str=malloc(BUFSIZ))==NULL){
printf("\n\t MEMORY ERROR");
exit(1);
}
if((pch=malloc(BUFSIZ))==NULL){
printf("\n\t MEMORY ERROR");
exit(1);
}
str="This is a simple string ";
pch=str;
while(str[i]!='\0'){
printf("%c",str[i]);
i++;
}
printf(" -1break\n");
while((*pch!='\0')){
printf("%c",*pch);
pch++;
}
printf(" -2break\n");
printf("%s %d %d %d %d\n",str,strlen(str),sizeof(*str),BUFSIZ,(BUFSIZ-strlen(str)));/*OK*/
if((pch=strstr(str,"simple"))!=NULL){
printf("%s \n",pch); **/*OK*/**
while((*pch!='\0')){
printf("%c",*pch);
pch++;
} **/*SEG FAULT*/**
strncpy(pch,"sample",6);
printf("OK\n");
}
printf("%s %d\n",str,strlen(str));
printf("\n");
return 0;
}
出力:
$ ./strstr
This is a simple string -1break
This is a simple string -2break
This is a simple string 24 1 8192 8168
simple string
Segmentation fault
$
問題:
「シンプル」を「サンプル」に置き換えることはできません。
質問:
pch
"simple" の 's' を正しく指している場合、なぜ" strncpy
sample" の 6 文字を置き換えることができないのですか?