繁体   English   中英

修改字符串指针中的一部分字符串

[英]modify part of a string in a string pointer

我有一个字符指针,为它分配了一个字符串。 而且我确定该字符串的长度为8个字符。 (例如:SHIVA0BS)而且,最后两个字母始终都是“ BS”也是一个事实。 但我要仔细检查一下。 现在,我想将前6个字符(“ SHIVA0”)附加到其他内容上,例如(“ SHIVA0NN”)-我将如何使其成为可能?

     #include<stdio.h>
     #include<stdlib.h>
     void main()
     {
     char *ptr, *new;
     ptr = "FECI00BS";
     strncpy(new,ptr,6);
     printf("%s",new);
     strcat(new,"NN");
     }

上面的代码是我写的。 而且我不确定为什么它不起作用。 我知道我的要求非常琐碎,但是我在两者之间尝试了printfs。 我能够找到(ptr + 6)打印的“ BS”,因此6是我需要的长度。 但这仍然行不通。 任何帮助表示赞赏。 我需要字符串指针中的输出。 一个新的就可以了。 但是一个字符串指针。

PS:请只使用C代码。 没有C ++。

您没有分配内存来保存新字符串

char * new = calloc(1, 10); // on heap

要么

char new[10]; // on stack
memset(new, 0, sizeof(new)); // zero it

您没有分配用于存储字符串的内存。

您需要为* ptr和* new分配内存。

最低要求是:

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

int main()
{

    char *ptr, *new;
    new = (char*)malloc(sizeof(char) * 9);
    new = (char*)malloc(sizeof(char) * 9);
    ptr = "FECI00BS";
    strncpy(a,ptr,6);
    printf("%s",new);
    strcat(a,"NN");
    printf("%s",new);

}

由于行尾字符'\\ 0',您需要9个字节(假设您的平台每个字符需要一个字节),为了使用某些string.h函数或print,该字符必须出现在字符串的末尾他们正确。

另外,请阅读为什么需要小心使用strncpy 根据您的平台,您可能可以使用C标准的一些更新,更安全的替代方法。

我想你要:

sprintf(ptr+6, "NN");

这将修改您的缓冲区以将BS转换为NN。 在这种情况下,您可以摆脱new变量。

编辑

尝试这个。 注意char ptr[]而不是char* ptr 通过使用[]而不是指针,您可以在堆栈上分配缓冲区。 这使您可以写入缓冲区。

#include<stdio.h>
#include<stdlib.h>

void main()
{
    char ptr[] = "FECI00BS";
    sprintf(ptr+6,"NN");
    printf(ptr);
}

只需进行一些简单的检查和memcpy()

char *ShivaAppend(char *dest, const char *ptr, const char *suffix) {
  size_t len = strlen(ptr);
  if (len != 8) {
    return NULL;
  }
  if (strcmp(ptr, "BS") != 0) {
    return NULL;
  }
  len = strlen(suffix);
  if (len != 2) {
    return NULL;
  }
  memcpy(dest, ptr, 6);
  memcpy(&dest[6], suffix, 2);
  return dest;
}

...
char dest[9];
char *p = ShivaAppend(dest, "SHIVA0BS", "NN")
puts(p == NULL ? "fail", p);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM