c - 简单的 C 字符串操作

标签 c string

我试图在 C 中做一些非常基本的字符串处理(例如,给定一个文件名,砍掉文件扩展名,操作文件名,然后重新添加扩展名)- 我对 C 很生疏,并且遇到段错误。

char* fname;
char* fname_base;
char* outdir;
char* new_fname;
.....
fname = argv[1];
outdir = argv[2];
fname_len = strlen(fname);
strncpy(fname_base, fname, (fname_len-4)); // weird characters at the end of the truncation?
strcpy(new_fname, outdir); // getting a segmentation on this I think

strcat(new_fname, "/");
strcat(new_fname, fname_base);
strcat(new_fname, "_test");
strcat(new_fname, ".jpg");
printf("string=%s",new_fname);  

欢迎任何建议或指示。

对于这样一个基本问题非常感谢和抱歉

最佳答案

您需要为new_fnamefname_base 分配内存。以下是如何为 new_fname 执行此操作:

new_fname = (char*)malloc((strlen(outdir)+1)*sizeof(char));

strlen(outdir)+1 中,+1 部分用于为 NULL CHARACTER '\0' 终止符分配内存。

关于c - 简单的 C 字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3430743/

相关文章:

无法使用 C 中的 getchar() 和指针表示法获取用户输入

c++ - char[] 如何在参数中解释为 const std::strings

c - 提高 C 程序的性能

c - 记录内存分配错误

php - 如何在 php 中对字符串求和?

c - 验证用户输入 "string"长度(C语言)

java - 将两个字符串添加到 jtable 中,同时将总和添加到 jTextField 中

swift - 使用前缀列表从字符串中删除前缀

arrays - 动态创建一个连续的 5D 数组?

c - C 中指向结构体的双指针有什么用?