标签: strncpy

strncpy segfault

我一直无法使这段代码工作.我正在尝试获取要复制的字符数组,因此我可以计算出有多少令牌可以动态分配并保存它们以便检查环境变量.但是,当它试图strncpy原始字符串时,我保持segfaulting.

    void echo(char *str1)
    {
      char *token, *temp;
      char *saveptr1;
      int j, i, k, counter;
      char *copy;

      strncpy(copy, str1, 80);

      const char *delim = " ";
      i = strlen(copy);

      for(j = 0; j < i; j++, copy = NULL)
      {
         token = strtok_r(copy, delim, &saveptr1);
         counter++;
         if(token == NULL)
         {
           counter--;
           break;
         }
      }

      // initialize token array for echo
      char *tokAr[counter];
      for(j = 0; j < counter; j++)
        tokAr[j] = malloc(80*sizeof(char));

      for(j = 0, k = 0; j < …
Run Code Online (Sandbox Code Playgroud)

c segmentation-fault strncpy

2
推荐指数
1
解决办法
2762
查看次数

strncpy引入了有趣的角色

当我在我的机器上运行一些代码时,它的行为就像我期望的那样.

当我在同事身上跑它时,它行为不端.这就是发生的事情.

我有一个值为的字符串:

croc_data_0001.idx

当我strncpy在字符串上提供18作为长度时,我复制的字符串的值为:

croc_data_0001.idx♂

如果我做以下事情

myCopiedString[18]='\0';
puts (myCopiedString);
Run Code Online (Sandbox Code Playgroud)

然后复制的字符串的值是:

croc_data_0001.idx

什么可能导致这个问题,为什么通过设置最后一个字符来解决\0

c strncpy

2
推荐指数
1
解决办法
2635
查看次数

如何strncpy()到WCHAR

我得到了一段在多字节字符集下工作的代码.但是,我想将这段代码转换为UNICODE.所以我修复了很多东西,但在strncpy()行失败了.这是我想要更改的行:

strncpy(a.szTip, szToolTip, bLength);
Run Code Online (Sandbox Code Playgroud)

我使用了很多函数来解决这个问题,但是所有函数都失败了.

这是错误:

strncpy cannot convert parameter 1 from WCHAR[128] to char *
Run Code Online (Sandbox Code Playgroud)

c c++ unicode strncpy

2
推荐指数
1
解决办法
6846
查看次数

strncpy附加1个额外(奇怪或随机)char

我写了一个简单的c程序,只取一个单词的前两个字符,取第二个单词的最后三个字符.我使用strncpy只将name1的前两个字母复制到name,并与name2中的最后三个字符连接.

但是,当我运行它.输出会以某种方式

Ediacy //correct

acy  //wrong

Ed?
acy  //wrong

Edk
   acy //wrong

Edv
   acy //wrong

// code sample
#include <stdio.h>
#include <string.h>

int main(void)
{
    char name[100];

    char name1[] = "Edison";
    char *name2 = "Tracy";

    strncpy(name, name1, 2); // instead of get Ed, it tried to append one extra char behind it.
    strcat(name, name2+2);

    printf("%s\n", name);

    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

我真的很感激,如果有人帮我弄明白为什么它会像这样,我怎么能纠正它?

c substring concatenation strncpy

2
推荐指数
1
解决办法
659
查看次数

c strncpy null是否终止

我正在阅读这份文件,它说:

char *strncpy(char *destination, const char *source, size_t num);
Run Code Online (Sandbox Code Playgroud)

从字符串复制的字符复制第一num的人物sourcedestination.如果在复制字符source之前找到C字符串的末尾(由空字符表示)num,destination则用零填充,直到num写入总共字符为止.

如果source长于,则不会在目标末尾隐式附加空字符num.因此,在这种情况下,destination不应将其视为空终止的C字符串(读取它会溢出).

destination并且source不得重叠(重叠时参见memmove更安全的替代方案).

但我对此声明感到困惑:

在这种情况下,目标不应被视为空终止的C字符串(读取它会溢出)

因为if num > strlen(source),它将'\0'在最后填充,'\0'实际上是字符串中的空(终止)字符,为什么它不应被视为以null结尾的C字符串?

我写了下面的代码来验证:

  char from[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
  char to[1024];
  for (int i = 0; i < 1024; i++) {
      to[i] = 'e';
  }
  strncpy(to, from, 1024);
  printf("from …
Run Code Online (Sandbox Code Playgroud)

c strncpy

2
推荐指数
2
解决办法
6674
查看次数

使用strncpy()复制const char*

我是C的新手,我使用strncpy函数卡住了.

这是我正在使用的一个例子:

int main()
{

const char *s = "how";

struct test {
    char *name;
};

struct test *t1 = malloc(sizeof(struct test));

strncpy(t1->name, s, sizeof(*s));
t1->name[NAMESIZE] = '\0';

printf("%s\n", t1->name);

}
Run Code Online (Sandbox Code Playgroud)

我有一个const char*,我需要将test的"name"值设置为const char.我很难搞清楚这一点.这甚至是正确的方法吗?

非常感谢你!

c strncpy

1
推荐指数
1
解决办法
1万
查看次数

strncpy导致LPC-2378挂起/死亡

我正在为Olimex LPC2378-STK做一些工作.

我有以下声明.

unsigned char buffer[256];
Run Code Online (Sandbox Code Playgroud)

然后我尝试做:

strncpy((char *)buffer, "CREATED_BY", 255);
Run Code Online (Sandbox Code Playgroud)

有谁知道这会导致问题的原因.

如果我注释掉它运行的代码行没有问题,但使用它似乎导致程序死亡.

有人有任何想法吗?

c embedded strncpy

1
推荐指数
1
解决办法
261
查看次数

警告:从不同大小的整数转换为指针[-Wint-to-pointer-cast]

我正在用David Haskins的一本名为"C in Linux"的书学习C,但是有一个问题.当我尝试编译此代码时:

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

int main (int argc, char *argv[], char *env[]) {

    printf("Content-type:text/html\n\n<html><body bgcolor=#23abe2>\n"); 
    char value[256] = "";

    strncpy(value,(char *) getenv("QUERY_STRING"), 255);
    printf("QUERY_STRING:%s<BR>\n", value );
    printf("<form>\n");
    printf("<input type=\"TEXT\" name=\"ITEM1\"> \n");
    printf("<input type=\"TEXT\" name=\"ITEM2\"> \n");
    printf("<input type=\"SUBMIT\">");
    printf("</form></body></html>\n");

    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

终端显示此警告!

chapter4_1.c: In function ‘main’:
chapter4_1.c:14:16: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
Run Code Online (Sandbox Code Playgroud)

c warnings compiler-errors strncpy getenv

1
推荐指数
1
解决办法
7004
查看次数

使用strncpy(),其中destination包含源

首先,如果有人回答,我道歉.我做了搜索stackoverflow,但找不到类似的主题.(也许我的搜索功能很弱)

我编写了一个函数来修剪C中字符串中的空格字符.我关心的是trim函数中的最后一行,其中源包含在目标中.测试用例都很好,还有其他一些测试.可以复制源和目标位于同一内存中的全部或部分字符串会导致奇怪的问题吗?

谢谢,

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

void trim(char *line)
  {
  int  i, len = strlen(line);
  char *ptr, whitespace[] = " \t\n";

  // scan for first char which does not match a char in whitespace string
  for (i=0; i<len; i++)
    if (strchr(whitespace, line[i]) == NULL)
      break;
  ptr = line + i;

  // scan for last char which does not match a char in whitespace string
  for (i=len; i>0; i--)
    if (strchr(whitespace, line[i]) == NULL)
      break;
  line[i] + 1) = …
Run Code Online (Sandbox Code Playgroud)

c string nested trim strncpy

1
推荐指数
1
解决办法
436
查看次数

这里的 strncpy_s() 有什么问题?

我正在阅读我的教科书并试图解决给读者的问题。

空闲代码是我的答案源文件中的函数定义。

我想将字符串的内容复制到另一个字符串。

我选择了函数 strncpy_s()。

但它不起作用。

Microsoft Visual Studio 说调试断言失败!

我不知道如何解决它。

牛.h

// 类声明

#include <iostream>
#ifndef COW_H_
#define COW_H_

class Cow {
char name[20];
char * hobby;
double weight;
public:
Cow();
Cow(const char * nm, const char * ho, double wt);
Cow(const Cow & c);
~Cow();
Cow & operator=(const Cow & c);
void ShowCow() const;  // display all cow data   
}; 
#endif
Run Code Online (Sandbox Code Playgroud)

牛.cpp

// 类方法

Cow::Cow(const char * nm, const char * ho, double wt)
{
    int len = …
Run Code Online (Sandbox Code Playgroud)

c++ strncpy

1
推荐指数
1
解决办法
1万
查看次数