C언어 이거 결과가 예상한거하고 다르네요
글쓴이: stargt / 작성시간: 금, 2006/01/20 - 1:30오후
#include <stdio.h> main() { int i = 0, j = 0; char a[12] = "book", b[] = "marks"; printf("%s+%s=", a, b); while(a[i] != '\0') i++; while(b[i] != '\0'){ a[i] = b[j]; i++; j++; } a[i] = '\0'; printf("%s\n", a); }
이렇게 짧게 썼는데요
원하는 결과는
book+marks=bookmarks
이건데 계속
book+marks=bookm
이렇게 나오네요;;
끝에 bookm 이거 표시하는 변수가 결과적으로 a인데 a의 길이를 조사해보니까 5던데
이게 왜 원하는 결과가 안나오는거예요;
Forums:
[code] while(b[i] != '\0'){ [code/]이
오프토픽입니다만,[code:1]a[i] = b[
오프토픽입니다만,
랑
둘중에 어느 걸 많이들 쓰시는지요?
----
Let's shut up and code.
ㅡㅡ
이거 성안당에서 나온 번역본이 원래 이런가요?
한 5번정도 소스코드 오류를 본것같은데..
어쩄든 해결해주셔서 감사합니다
#include <stdio.h>
int main()
{
while(1)
printf("0");
return 0;
}
[quote="sangwoo"]오프토픽입니다만,[code:1]a	
이런 식의 코드를 아직까지 써본 적이 없어서 잘 모르겠지만
만약 쓴다고 하면 후자를 사용할 것 같습니다.
후자를 쓰는 것이 내용이 복잡해지거나 애매해지는 경우는 없을 것 같아서요.
[quote="sangwoo"]오프토픽입니다만,[code:1]a	
전 전자 입니다.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
[quote="xster"][quote="sangwoo"]오프토픽입니다만
후자의 경우엔 애매한 경우가 생길 수도 있습니다...
a[i++] = b[i++];
이런 류의 애매함이 생길 수 있다는 거죠.
전에도 이런 글타래에 참가를 했었는데
http://bbs.kldp.org/viewtopic.php?t=64841
아직 a[a[i]]의 진실을 모르겠군요.. +_+;;
2006년 1월 21일.
[code:1]result = (i=pop()&
연산자는 우선순위 외에도 결합 방향이 있습니다.
결합방향에 따르면 a - b 에서 a 가 먼저 실행되고 b가 실행이 됩니다.
따라서 위의 코드에서는 앞의 pop이 먼저 실행된다고 예측되는군요.
-S 옵션을 줘봐서 어셈으로 펼쳐 보는 방법으로 확인 가능할듯 합니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
[quote="IsExist"][code:1]result = (
전 글타래를 잘 보시면
상관 없다는 것(예측 불가)을 아실 수 있습니다.
결합방향에 상관이 없이 operand의 평가시점은
임플리멘테이션에 의존하기때문에 모른다는게 요점입니다.
[quote]아직 a[a[i]]의 진실을 모르겠군요.. +_+;; [/q
a[i] == i 인 경우에 문제가 되는 것이 아닐까요? 이런 경우, 다음과 같은 수식에서 두 시퀸스 포인트 사이에서 a[i]에 대한 참조와 수정이 동시에 일어나게 됩니다.
a[a[i]] = 1;
하지만, 어떤 순서로 동작이 일어날 때 문제가 발생하는 지는 잘 모르겠군요. 역시 전웅님이 오셔야...;;;
[quote="IsExist"]-S 옵션을 줘봐서 어셈으로 펼쳐 보는 방
어셈으로 펼쳐보는 것만이 능사는 아닙니다. A + B라는 수식이 있을 때, 컴파일러가 어떤 기준으로 먼저 평가할 피연산자를 선택하는지 알 수 없기 때문입니다. 실제로, 컴파일러는 최적화를 위해 피연산자들의 평가 순서를 멋대로 바꾸기도 합니다.
길게 설명하기 귀찮으니 걍 긁겠습니다.
The grouping of operators and operands is indicated by the syntax. Except as specified later (for the function-call (), &&, ||, ?:, and comma operators), the order of evaluation of subexpressions and the order in which side effects take place are both unspecified.
댓글 달기