English 中文(简体)
2. 连续两次造成断裂
原标题:Concatenating string with itself two times give segmentation fault
  • 时间:2011-11-22 18:08:09
  •  标签:
  • c
  • string
#include <stdio.h>

int main(void)
{
    char a[100] = "hi";

    strcat(a, a);
    strcat(a, a);

    printf("%s
", a);

    return 0;
}
问题回答

从C语标准中的strcat下的定义,§7.21.3.1/2

<编码> 如果复制在重复的物体之间发生,则不明确。

我的编篡甚至一次如strcat(a, a);复制了第一个论点末尾关于的第二种论点的第一份性质,然后是第二个论点之后的第二次性质,等等,直到它在第二个论点中遇到为止。

原文:

<><>>>>>

The strcat() and strncat() functions append a copy of the null-terminated
string s2 to the end of the null-terminated string s1, then add a termi-
nating . The string s1 must have sufficient space to hold the
result.

The strncat() function appends not more than n characters from s2, and
then adds a terminating .`

The source and destination strings should not overlap, as the behavior is
undefined.

This is undefined behavior.

如果你在座右边读到每张<条码><>>条/条码>,则在座右边读到<条码>,但与此同时,你在休息时间结束时再读(书面)果园?

I suspect it s because the implementation is overwriting the null byte at the end:

Start: a = {h,i,}
         src^   vdst
next:  a = {h,i,h}
           src^   vdst
next:  a = {h,i,h,i}
             src^   vdst
next:  a = {h,i,h,i,h}
...

由于你夸大了无名词,你的消息来源描述将永远不会结束,而且这种方法将保持复制,直到它努力获得其笔迹和eg。





相关问题
Simple JAVA: Password Verifier problem

I have a simple problem that says: A password for xyz corporation is supposed to be 6 characters long and made up of a combination of letters and digits. Write a program fragment to read in a string ...

Case insensitive comparison of strings in shell script

The == operator is used to compare two strings in shell script. However, I want to compare two strings ignoring case, how can it be done? Is there any standard command for this?

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

String initialization with pair of iterators

I m trying to initialize string with iterators and something like this works: ifstream fin("tmp.txt"); istream_iterator<char> in_i(fin), eos; //here eos is 1 over the end string s(in_i, ...

break a string in parts

I have a string "pc1|pc2|pc3|" I want to get each word on different line like: pc1 pc2 pc3 I need to do this in C#... any suggestions??

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签