c - 如何获取字符串的特定部分?
问题描述
我正在尝试构建一个程序,该程序从用户那里获取声明(例如:int x
or char 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;
}
推荐阅读
- sql - SQL 日期范围规范,显式与 BETWEEN()
- java - Return top element in a stack
- visual-prolog - 有4个条件的支票号码
- c++ - 控制允许动态运行的并发动作的数量c c ++
- python - Issues in reading date column from csv in python
- http - 是否可以同时运行 http.ListenAndServe() AND ReadFromUDP() ?
- python - How do I store the absolute value of random numbers in a certain column of an array?
- android - Android ImageView strecthes background
- c# - How can I access to my Grid table from my private method
- javascript - Javascript calculate all values from HTML list