c - 如何获取字符串的特定部分?

标签 c string file

我正在尝试构建一个从用户那里获取声明的程序 (例如:int xchar idan)然后打开一个新文件,并向其中写入为声明分配内存所需的大小。

我几乎完成了所有事情,即使是用户声明中充满空格的情况,但我很难获得变量名的字符串。

我想创建一个函数,它将仅复制变量名称并返回一个名为 var_name 的新字符串。我该怎么做?

*更新 - 2018 年 5 月 9 日

嘿,我找到了一种只复制部分字符串的方法:

strncpy(var_name, &declaration[7], count);
var_name[count + 1] = '\0';

现在当我返回 var_name 时(var_name 是一个字符串) 它可以正常返回,但是当我将它发送到另一个函数时,它就变成了垃圾...

最佳答案

不要使用strncpy,它不会按照您的想法进行:https://randomascii.wordpress.com/2013/04/03/stop-using-strncpy-already/

在你的例子中,假设 var_name 足够大,至少 count + 1 字节,一个简单的调用 memcpy(var_name, declaration + 7, count ) 会更好。

您可能在代码中犯了另一个错误(您没有发布):您不能返回本地数组的地址,返回后访问其内容具有未定义的行为。

这是一个简单的函数,您可以使用它来分配和复制字符串的一部分:

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

char *substr(const char *s, size_t pos, size_t len) {
    char *p = malloc(len + 1);
    if (p) {
        memcpy(p, s + pos, len);
        p[len] = '\0';
    }
    return p;
}

这样使用:

#include <stdio.h>

int main() {
    char *p1 = substr("Hello world\n", 0, 5);
    char *p2 = substr("Hello world\n", 6, 5);
    printf("%s %s\n", p1, p2);
    free(p1);
    free(p2);
    return 0;
}

关于c - 如何获取字符串的特定部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50231642/

相关文章:

arrays - 从 UIImage 数组获取值并转换为字符串

python - “合并”列表中元素上的 2 个数据框? - 双 key

java - 使用 BufferedReader 将文件内容存储在 Integer 的 ArrayList 中

c# - 如何读取仅由 LF 分隔的文件中的每一行?

c++ - ncurses getch() 跳过每个第二个字符

c - 关于哈希函数

c - sscanf 读取 ( ) 中的字符串

c - 从 C 中的文本文件中解析值

c - 无法运行 LodePNG 示例

c# - 将 Web api blob 读入字符串,我可以将其作为 json 对象的一部分发送到服务器并返回到文件