c-在字符串中添加Null终止符时出现分段错误



来自大学的任务:new_string应复制到next_string->个字符,但只有MAX_STR_LENGTH字符为next_string分配->字符,因此在if语句(36(中剪切新字符串,为字符串添加一个null终止符。只要new_string的长度与MAX_STR_LENGTH相同,并且if语句为true,我就会在第38行出现分段错误。我不明白为什么,因为由于if语句,必须存在并索引MAX_STR_LENGTH-1。还有:strlen不计算\0,所以一切都应该好吗?

22     string* next_string;
23     // (Allokierung und Prüfung des Speichers)
24     // TODO: Implementieren Sie hier Ihre Lösung
25         if((next_string = (string*)malloc(sizeof(string)))==NULL){
26                 exit(1);
27         }
28         if((next_string->characters = (char*)malloc(MAX_STRING_LENGTH*sizeof(char)))==NULL){
29                 exit(1);
30         }
31     // die Zeichenkette abschneiden
32     int length = strlen(new_string);
33         printf("%d", length);
34     // TODO: Implementieren Sie hier Ihre Lösung um zu lange Zeichenketten
35     // abzuschneiden
36         if(length > MAX_STRING_LENGTH-1){
37                 length = MAX_STRING_LENGTH-1;
38                 new_string[MAX_STRING_LENGTH-1] = '';
39                 //snprintf(new_string, , "%s",new_string);
40         }
41
42     next_string->length = length;
43     strncpy(next_string->characters, new_string, length+1/* TODO */);
44
45     return next_string;```
46 }

您没有展示new_string是如何初始化的,但我敢打赌您有相当于的东西

char *new_string = "abc";

修改由字符串文字产生的字符串是未定义的行为。

删除有问题的行,并使用以下方法将字符串复制到缓冲区:

if ( length >= MAX_STRING_LENGTH )
length = MAX_STRING_LENGTH - 1;
next_string->length = length;
if ( length )
strncpy( next_string->characters, new_string, MAX_STRING_LENGTH - 1 );
next_string->characters[ length ] = 0;

此外,应该将new_string设置为const char *,而不是char *

最新更新