スペースがない場合は、 "/" Cの前に空白を入れることができるこの関数を得ました。そして、文字列をうまくカットしますが、文字列を連結するときにエラーが発生し、メモリ違反が発生する可能性があります。私に手を差し伸べてください。Cでの文字列連結
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* substr(const char *pstr, int start, int numchars) {
char* pnew = malloc(numchars + 1);
strncpy(pnew, pstr + start, numchars);
pnew[numchars] = '\0';
return pnew;
}
char* fixString(char str[]) {
char* position;
char* newString = "";
char* finalString;
int oldPosition = 0;
printf("Original str: %s\n", str);
printf("Original length: %d\n\n", strlen(str));
position = strchr(str, '/');
while (position != NULL) {
int charPosition = position - str;
printf("String position: %d->%d\n", oldPosition, charPosition);
newString = substr(str, oldPosition, charPosition - oldPosition);
oldPosition = charPosition;
if (charPosition > 0 && str[charPosition - 1] != ' ') {
printf("Previous char: %c\n", str[charPosition - 1]);
newString = strcat(newString, " ");
}
printf("String: |%s|\n", newString);
if (strlen(newString) > 0) {
finalString[0] = strcat(finalString, newString);
}
printf("------------\n");
position = strchr(position + 1, '/');
}
char* lastString = substr(str, oldPosition, strlen(str));
finalString = strcat(finalString, lastString);
printf("lastString: %s\n\n", lastString);
return finalString;
}
int main() {
char* testString = "/Filter /FlateDecode/Length 7108/Subtype /Type1C";
printf("%s", fixString(testString));
return 0;
}
質問の形で言い換えてください。ありがとう。 –
あなたの 'newString'と' finalString'には 'malloc'メモリがありません。 – birryree
質問:私は間違って何をしていますか? –