gpt4 book ai didi

c - 为什么在尝试将字符串映射到其标记时会出现段错误?

转载 作者:行者123 更新时间:2023-11-30 17:26:33 25 4
gpt4 key购买 nike

我需要将字符串映射到数组,以便“hacker”映射到[“h”,“ack”,“er”]。也就是说,我需要找到字符串中按升序排列的最大连续字符集。

我必须编写一个需要的函数

  • 字符串
  • 指向字符串数组的指针
  • 指向后者大小的指针

这样

f("hacker") = ([ "h", "ack", "er"], 3)

此函数的典型调用和使用是

char **tokens = NULL;
size_t tokens_length = 0;
tokenize("hacker", &tokens, &tokens_size)
printf("[ ");
for (int i = 0; i < tokens_length; i++) {
printf("\"%s\", " tokens[i]);
}
printf("]");

这是我编写的函数的主体

void tokenize (const char *s, char ***tokens, size_t *tokens_length) {
char *current_ptr = NULL;
char *previous_ptr = NULL;
size_t characters_read = 0;
current_ptr = previous_ptr = s;
for (; current_ptr < s + strlen(s);) {
characters_read = characters_read + 1;
if (*(current_ptr + 1) < *current_ptr) {
*tokens_length = *tokens_length + 1;
*tokens = (char**)realloc((void*)*tokens, *tokens_length * sizeof(char*));
*tokens[*tokens_length - 1] = (char*)calloc(characters_read + 1, sizeof(char));
strncpy(*tokens[*tokens_length - 1], previous_ptr, characters_read * sizeof(char));
previous_ptr = current_ptr + 1;
characters_read = 0;
}
current_ptr = current_ptr + 1;
}
}

这是典型的输出...

[1]    4789 segmentation fault (core dumped)

你知道我为什么无法管理内存吗?

<小时/>

Here是我试图使其发挥作用的来源。

最佳答案

捕获!:)至少我没有遇到段错误。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

size_t tokenize( const char *s, char ***tokens )
{
size_t n = 0;
const char *p;

*tokens = NULL;

p = s;
while ( *p )
{
for ( const char *q = p; !( *++p < *q ); ++q );
++n;
}

if ( n != 0 )
{
size_t i = 0;

*tokens = ( char ** )malloc( n * sizeof( char * ) );

p = s;
do
{
const char *q = p++;

while ( !( *p < *( p - 1 ) ) ) ++p;

( *tokens )[i] = malloc( p - q + 1 );
strncpy( ( *tokens )[i], q, p - q );
( *tokens )[i][p-q] = '\0';

++i;
} while ( *p );
}

return n;
}

int main(void)
{
char s[] = "hacker";
char **tokens;
size_t n;

n = tokenize( s, &tokens );

printf( "[ " );
for ( size_t i = 0; i < n; i++ )
{
printf( "\"%s\", ", tokens[i] );
}
printf( "]\n" );

free( tokens );

return 0;
}

程序输出如下

[ "h", "ack", "er", ]

关于c - 为什么在尝试将字符串映射到其标记时会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26743067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com