标签: strncpy

strncpy没有按预期工作

#include <iostream>
using namespace std 
#include <string.h>
int main(){
    char token[] = "some random string";
    char c[23];  
    strcpy( c, token);
    strncpy(c, token, 5); 
    c[strlen(c)] = '\0';
    cout<<c;
    return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

我的输出是:some random string.但我希望它是:some.任何人都可以解释为什么它的行为像这样?

c++ string strncpy

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

字符串长度为76的问题

我在这里不知所措.将在短时间内发布我的代码...只是它太长了,无法提取部分"令人不安"的代码.将expalin我的问题:我在一个结构数组中存储一个字符串(文件或目录的路径),{ char *path; size_t path_len}其中path是字符串path_en及其长度.在插入path_lenis 76时.从数组中提取strncpy字符串长度变为78或甚至数组中的字符串的简单strlen说77.

原始字符串长度小于77的所有其他情况都可以正常工作.

我很困惑.

c strlen strncpy

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

STRCPY 是未定义的 C++

我试图实现 strcpy 或 strncpy 并且无论我使用哪个都显示错误。

错误仅在 strncpy 和 strcpy 下

项目.cpp:

#include "Item.h"
#include <iomanip>
#include <iostream>
#include <ctime>
#include <string>
using namespace std;
#include "Date.h"
#include "POS.h"
#include "PosIO.h"

namespace sict {
    Item::Item(){
         _name = '\0';
         _price = 0;
         _taxed ='0';
         _quantity = '\0';
    }

    Item::Item(const char* sku,  const char * name, double price, bool taxed){

        strNcpy(_sku, sku, MAX_SKU_LEN);

         name = new char[20];
        strcpy(_name, name);

        _quantity = 0;
        price = _price;
        if (price = '\0') {
            _taxed = true; …
Run Code Online (Sandbox Code Playgroud)

strcpy strncpy

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

为什么不能使用C++代码(strncpy_s)?

我是C++初学者.

当我学习C++类时,这个示例代码不起作用.

此代码被NameCard类构造函数中的strncpy_s()func中断.

我试过调试,但我找不到原因.

你可以帮帮我吗?这是完整的源代码

祝你今天愉快.

NameCard(char *name, char *phone, char *company, char *position)
{
    this->name = new char(strlen(name) + 1);
    this->phone = new char(strlen(phone) + 1);
    this->company = new char(strlen(company) + 1);
    this->position = new char(strlen(position) + 1);

    strncpy_s(this->name, strlen(name) + 1, name, strlen(name));
    strncpy_s(this->phone, strlen(phone) + 1, phone, strlen(phone));
    strncpy_s(this->company, strlen(company) + 1, company, strlen(company));
    strncpy_s(this->position, strlen(position) + 1, position, strlen(position));
}
Run Code Online (Sandbox Code Playgroud)

c++ strncpy

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

调用strcpy后,第二个char数组变空

这是我程序中的函数原型:
void FindRepStr(char str[], const char findStr[], const char replaceStr[]);

它发现findStr[]str[]与更换replaceStr[].

这是我的代码:

void FindRepStr(char str[], const char findStr[], const char replaceStr[])
{
  char *s = nullptr;
  s = strstr(str,findStr); //s points to the first-time appear in str

  char tmp[] ="";

  //length equal
  if(strlen(findStr)==strlen(replaceStr))
  {
    for(int i=0;i<strlen(findStr);i++)
    {
        if(replaceStr[i]=='\0' || s[i] =='\0')
         break;
        else
            s[i] = replaceStr[i];
    }

    cout<<str<<endl;
  }

  else
  {
  //find shorter than replace
    if(strlen(findStr)<strlen(replaceStr))
    {
        //!!!problem here!!!
        strncpy(tmp,s,strlen(s)+1); // store the left …
Run Code Online (Sandbox Code Playgroud)

c++ strcpy strncpy

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

替代strcpy?还是修复程序中的strcpy?

我无法弄清楚这个程序有什么问题.我试过用

                      strncpy(text,array[ ],sizeof(text)) 
Run Code Online (Sandbox Code Playgroud)

已经但是没有解决任何问题.我需要的是一种复制字符串的简单方法,如pascal语言,其中可以使用简单的等号来复制字符串(或者可以执行此操作的生成函数).这是源代码:

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

int x,y;

char array[10][10];
int choice;
char text[5];


int main()
 {
    for(x=0;x<5;x++)
     {
        printf("ENTER text: ");
        scanf("%s", text);   
        strcpy (text,array[x]);
     }

     for (y=0;y<5;y++)
      {
        printf("\n");
        printf("%s", array[y]);
      }
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的;

"*string*"
"*string*"
"*string*"
"*string*"
"*string*"
Run Code Online (Sandbox Code Playgroud)

但我得到的是五个空格,没有字符串.任何方案?

c string stdio strcpy strncpy

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

是不是比strcpy更好?

我知道网上有很多答案,说一个比另一个更好,但我已经明白,strncpy()在防止由于缺失而导致系统不必要的崩溃方面更好'\0'.正如许多人所说,这是非常防御性的.

我已经浏览过这个链接:为什么要使用strncpy而不是strcpy?

让我们说:

char dest[5];
char src[7] = "Hello";
strncpy(dest, src, sizeof(dest)-1);
Run Code Online (Sandbox Code Playgroud)

有了这个实现(密钥sizeof(dest)-1总是为'\0'附加提供空间),即使目标有一个截断的字符串,是不是总是更安全使用strncpy()而不是strcpy()?换句话说,我想明白了一会时,要使用strcpy()strncpy()

c strcpy strncpy

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

未充分利用的内存会导致内存泄漏吗?

strncpy()当我们将较少数量的数据复制到较大的(编译时分配的)缓冲区时,是否会导致内存泄漏?换句话说,内存利用不足会被称为内存泄漏吗?

以下是我的代码

#define uk "ln"

int main()

{
  char buffer[32];
  strncpy(buffer,uk,sizeof(buffer));// IS it memory leak free?
                                    // uk macro has 3 byte of size to
                                    // hold the string but here the
                                    // Attemp of 32 byte is made to copy
                                    // from uk macro to buffer?
}  
Run Code Online (Sandbox Code Playgroud)

上面的代码中是否有内存泄漏或错误?

c memory-leaks strncpy

-5
推荐指数
2
解决办法
371
查看次数

标签 统计

strncpy ×8

c ×4

strcpy ×4

c++ ×3

string ×2

memory-leaks ×1

stdio ×1

strlen ×1