0

これは構造体を使った宿題の一部であり、この1つの機能を理解できないようです。関数はstring_t*concat(string_t * s1、string_t * s2)であり、新しい文字列構造体を返します。これは私がこれまでに持っているものであり、それに達するとコンパイラがクラッシュします。プログラムはコンパイルされますが、「file」.exeが動作を停止しました実行時にエラーが発生します。どんな助けでも大歓迎です。ありがとう!

typedef struct string{ //String struct (in .h file)

char *line;
int length;

} string_t;


string_t* concat(string_t *s1, string_t *s2) { //actual function (in .c)

int len1, len2;
len1 = length(s1);
len2 = length(s2);

int i, j, s;

string_t *newStr;
newStr = (string_t*)malloc(sizeof(string_t)*2);


for (i = 0; i<len1; i++) {
    *((newStr->line)+i) = *((s1->line)+i);
    }

for (j=0; j<len2; j++) {
    *((newStr->line)+(i+j)) = *((s2->line)+j);
    }

*((newStr->line)+(i+j))='\0';

return newStr;

}



concat(s1, s2); //tests function
4

2 に答える 2

4
newStr = (string_t*)malloc(sizeof(string_t)*2);

にメモリを割り当てますnewStrが、にはメモリを割り当てませんnewStr->line。次のようなものを試してください:

newStr = malloc(sizeof *newStr);
newStr->line = malloc(s1->length + s2->length + 1);

補足: 。*((newStr->line)+i)と書くことができますnewStr->line[i]

于 2013-02-27T04:15:33.043 に答える
0

ところで、これはその醜いptr数学構文なしで猫を飼う方法です:

char* dest = newStr->line;

const char* src = s1->line;
while (*src)
{
  *dest = *src;
  ++dest;
  ++src;
}

src = s2->line;
while (*src)
{
  *dest = *src;
  ++dest;
  ++src;
}

*dest = '\0';
于 2013-02-27T04:28:30.327 に答える