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

时间:2018-05-08 10:40:33

标签: c string file

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

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

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

*更新 - 5/9/18

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

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

现在当我返回var_name(var_name是一个字符串) 它返回好吧,但是当我把它发送到另一个功能时它变成了垃圾......

1 个答案:

答案 0 :(得分:0)

不要使用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;
}