gpt4 book ai didi

c - 在c中修剪字符串时遇到麻烦

转载 作者:行者123 更新时间:2023-11-30 19:23:27 26 4
gpt4 key购买 nike

我正在使用this question作为在 C 中修剪字符串的指南。它适用于仅由空格 (' ') 界定的字符串,但适用于特殊空格 ('\r', '\n''\t' 等),它会失败。这是一个例子:

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

size_t trim(char *out, size_t len, const char *str)
{
if(len == 0)
return 0;

const char *end;
size_t out_size;

// Trim leading space
while(isspace(*str)) str++;

if(*str == 0) // All spaces?
{
*out = 0;
return 1;
}

// Trim trailing space
end = str + strlen(str) - 1;
while(end > str && isspace(*end)) end--;
end++;

// Set output size to minimum of trimmed string length and buffer size minus 1
out_size = (end - str) < len-1 ? (end - str) : len-1;

// Copy trimmed string and add null terminator
memcpy(out, str, out_size);
out[out_size] = 0;

return out_size;
}

int main(){

char *str = " \n\n hello \t \r ";
char trimmed[strlen(str)];

trim (trimmed, strlen(trimmed), str);
printf("~%s~\n~%s~\n", str, trimmed);

return 0;
}

产生输出:

~ 

~ello
~~

任何人都可以修复代码以正确修剪所有空白字符吗?

第二个问题:引用答案中的第一个函数给了我一个段错误。有谁知道为什么会这样吗?

最佳答案

您调用该函数的方式不正确。

char *str = " \n\n  hello  \t    \r  ";
char trimmed[strlen(str)+1]; // Note that you must +1 for the terminating \0.

// Use sizeof() instead of strlen() because trimmed is containing garbage.
// strlen() measures the length of the content while sizeof() measure the allocated size of the array.
trim (trimmed, sizeof(trimmed), str);

关于c - 在c中修剪字符串时遇到麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905671/

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